Recent from talks
Nothing was collected or created yet.
Software prototyping
View on Wikipedia| Part of a series on |
| Software development |
|---|
Software prototyping is the activity of creating prototypes of software applications, i.e., incomplete versions of the software program being developed. It is an activity that can occur in software development and is comparable to prototyping as known from other fields, such as mechanical engineering or manufacturing.
A prototype typically simulates only a few aspects of, and may be completely different from, the final product.
Prototyping has several benefits: the software designer and implementer can get valuable 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 prototyping have been in development and debate since its proposal in the early 1970s.[1]
Overview
[edit]The purpose of a prototype is to allow users of the software to evaluate developers' 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. Software prototyping provides an understanding of the software's functions and potential threats or issues.[2] Prototyping can also be used by end users to describe and prove requirements that have not been considered, and that can be a key factor in the commercial relationship between developers and their clients.[3] Interaction design in particular makes heavy use of prototyping with that goal.
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.[citation needed] 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 having to change a finished software product.
The practice of prototyping is one of the points Frederick P. Brooks makes in his 1975 book The Mythical Man-Month and his 10-year anniversary article "No Silver Bullet".
An early example of large-scale software prototyping was the implementation of NYU's Ada/ED translator for the Ada programming language.[4] It was implemented in SETL with the intent of producing an executable semantic model for the Ada language, emphasizing clarity of design and user interface over speed and efficiency. The NYU Ada/ED system was the first validated Ada implementation, certified on April 11, 1983.[5]
Outline
[edit]The process of prototyping involves the following steps:[citation needed]
- Identify basic requirements
- Determine basic requirements including the input and output information desired. Details, such as security, can typically be ignored.
- Develop initial prototype
- The initial prototype is developed that includes only user interfaces. (See Horizontal Prototype, below)
- Review
- The customers, including end-users, examine the prototype and provide feedback on potential additions or changes.
- Revise and enhance the prototype
- Using the feedback both the specifications and the prototype can be improved. Negotiation about what is within the scope of the contract/product may be necessary. If changes are introduced then a repeat of steps #3 and #4 may be needed.
Dimensions
[edit]Nielsen summarizes the various dimensions of prototypes in his book Usability Engineering:
Horizontal prototype
[edit]A common term for a user interface prototype is the horizontal prototype. It provides a broad view of an entire system or subsystem, focusing on user interaction more than low-level system functionality, such as database access. Horizontal prototypes are useful for:
- Confirmation of user interface requirements and system scope,
- Demonstration version of the system to obtain buy-in from the business,
- Develop preliminary estimates of development time, cost and effort.
Vertical prototype
[edit]A vertical prototype is an enhanced complete elaboration of a single subsystem or function. It is useful for obtaining detailed requirements for a given function, with the following benefits:
- Refinement database design,
- Obtain information on data volumes and system interface needs, for network sizing and performance engineering,
- Clarify complex requirements by drilling down to actual system functionality.
Types
[edit]Software prototyping has many variants. However, all of the methods are in some way based on two major forms of prototyping: throwaway prototyping and evolutionary prototyping.
Throwaway prototyping
[edit]Also called close-ended prototyping. Throwaway or rapid prototyping refers to the creation of a model that will eventually be discarded rather than becoming part of the final delivered software. After preliminary requirements gathering is accomplished, a simple working model of the system is constructed to visually show the users what their requirements may look like when they are implemented into a finished system. It is also a form of rapid prototyping.
- Rapid prototyping involves creating a working model of various parts of the system at a very early stage, after a relatively short investigation. The method used in building it is usually quite informal, the most important factor being the speed with which the model is provided. The model then becomes the starting point from which users can re-examine their expectations and clarify their requirements. When this goal has been achieved, the prototype model is 'thrown away', and the system is formally developed based on the identified requirements.[6]
The most obvious reason for using throwaway prototyping is that it can be done quickly. If the users can get quick feedback on their requirements, they may be able to refine them early in the development of the software. Making changes early in the development lifecycle is extremely cost effective since there is nothing at that point to redo. If a project is changed after a considerable amount of work has been done then small changes could require large efforts to implement since software systems have many dependencies. Speed is crucial in implementing a throwaway prototype, since with a limited budget of time and money little can be expended on a prototype that will be discarded.
Another strength of throwaway prototyping is its ability to construct interfaces that the users can test. The user interface is what the user sees as the system, and by seeing it in front of them, it is much easier to grasp how the system will function.
- …it is asserted that revolutionary rapid prototyping is a more effective manner in which to deal with user requirements-related issues, and therefore a greater enhancement to software productivity overall. Requirements can be identified, simulated, and tested far more quickly and cheaply when issues of evolvability, maintainability, and software structure are ignored. This, in turn, leads to the accurate specification of requirements, and the subsequent construction of a valid and usable system from the user's perspective, via conventional software development models.[7]
Prototypes can be classified according to the fidelity with which they resemble the actual product in terms of appearance, interaction and timing. One method of creating a low fidelity throwaway prototype is paper prototyping. The prototype is implemented using paper and pencil, and thus mimics the function of the actual product, but does not look at all like it. Another method to easily build high fidelity throwaway prototypes is to use a GUI Builder and create a click dummy, a prototype that looks like the goal system, but does not provide any functionality.
The usage of storyboards, animatics or drawings is not exactly the same as throwaway prototyping, but certainly falls within the same family. These are non-functional implementations but show how the system will look.
Summary: In this approach the prototype is constructed with the idea that it will be discarded and the final system will be built from scratch. The steps in this approach are:
- Write preliminary requirements
- Design the prototype
- User experiences/uses the prototype, specifies new requirements
- Repeat if necessary
- Write the final requirements
Evolutionary prototyping
[edit]Evolutionary prototyping (also known as breadboard prototyping) is quite different from throwaway prototyping. The main goal when using evolutionary prototyping is to build a very robust prototype in a structured manner and constantly refine it. The reason for this approach is that the evolutionary prototype, when built, forms the heart of the new system, and the improvements and further requirements will then be built.
When developing a system using evolutionary prototyping, the system is continually refined and rebuilt.
- "…evolutionary prototyping acknowledges that we do not understand all the requirements and builds only those that are well understood."[8]
This technique allows the development team to add features, or make changes that couldn't be conceived during the requirements and design phase.
- For a system to be useful, it must evolve through use in its intended operational environment. A product is never "done;" it is always maturing as the usage environment changes…we often try to define a system using our most familiar frame of reference—where we are now. We make assumptions about the way business will be conducted and the technology base on which the business will be implemented. A plan is enacted to develop the capability, and, sooner or later, something resembling the envisioned system is delivered.[9]
Evolutionary prototypes have an advantage over throwaway prototypes in that they are functional systems. Although they may not have all the features the users have planned, they may be used on an interim basis until the final system is delivered.
- "It is not unusual within a prototyping environment for the user to put an initial prototype to practical use while waiting for a more developed version…The user may decide that a 'flawed' system is better than no system at all."[6]
In evolutionary prototyping, developers can focus themselves to develop parts of the system that they understand instead of working on developing a whole system.
- To minimize risk, the developer does not implement poorly understood features. The partial system is sent to customer sites. As users work with the system, they detect opportunities for new features and give requests for these features to developers. Developers then take these enhancement requests along with their own and use sound configuration-management practices to change the software-requirements specification, update the design, recode and retest.[10]
Incremental prototyping
[edit]The final product is built as separate prototypes. At the end, the separate prototypes are merged in an overall design. By the help of incremental prototyping the time gap between user and software developer is reduced.
Extreme prototyping
[edit]Extreme prototyping as a development process is used especially for developing web applications. Basically, it breaks down web development into three phases, each one based on the preceding one. The first phase is a static prototype that consists mainly of HTML pages. In the second phase, the screens are programmed and fully functional using a simulated services layer. In the third phase, the services are implemented.
- "The process is called Extreme Prototyping to draw attention to the second phase of the process, where a fully functional UI is developed with very little regard to the services other than their contract."[11]
Advantages
[edit]There are many advantages to using prototyping in software development – some tangible, some abstract.[12]
Reduced time and costs: Prototyping can improve the quality of requirements and specifications provided to developers. Because changes cost exponentially more to implement as they are detected later in development, the early determination of what the user really wants can result in faster and less expensive software.[7]
Improved and increased user involvement: Prototyping requires user involvement and allows them to see and interact with a prototype allowing them to provide better and more complete feedback and specifications.[6] The presence of the prototype being examined by the user prevents many misunderstandings and miscommunications that occur when each side believe the other understands what they said. Since users know the problem domain better than anyone on the development team does, increased interaction can result in a final product that has greater tangible and intangible quality. The final product is more likely to satisfy the user's desire for look, feel and performance.
Disadvantages
[edit]Using, or perhaps misusing, prototyping can also have disadvantages.
Insufficient analysis: The focus on a limited prototype can distract developers from properly analyzing the complete project. This can lead to overlooking better solutions, preparation of incomplete specifications or the conversion of limited prototypes into poorly engineered final projects that are hard to maintain. Further, since a prototype is limited in functionality it may not scale well if the prototype is used as the basis of a final deliverable, which may not be noticed if developers are too focused on building a prototype as a model.
User confusion of prototype and finished system: Users can begin to think that a prototype, intended to be thrown away, is actually a final system that merely needs to be finished or polished. (They are, for example, often unaware of the effort needed to add error-checking and security features which a prototype may not have.) This can lead them to expect the prototype to accurately model the performance of the final system when this is not the intent of the developers. Users can also become attached to features that were included in a prototype for consideration and then removed from the specification for a final system. If users are able to require all proposed features be included in the final system this can lead to conflict.
Developer misunderstanding of user objectives: Developers may assume that users share their objectives (e.g. to deliver core functionality on time and within budget), without understanding wider commercial issues. For example, user representatives attending Enterprise software (e.g. PeopleSoft) events may have seen demonstrations of "transaction auditing" (where changes are logged and displayed in a difference grid view) without being told that this feature demands additional coding and often requires more hardware to handle extra database accesses. Users might believe they can demand auditing on every field, whereas developers might think this is feature creep because they have made assumptions about the extent of user requirements. If the developer has committed delivery before the user requirements were reviewed, developers are between a rock and a hard place, particularly if user management derives some advantage from their failure to implement requirements.
Developer attachment to prototype: Developers can also become attached to prototypes they have spent a great deal of effort producing; this can lead to problems, such as attempting to convert a limited prototype into a final system when it does not have an appropriate underlying architecture. (This may suggest that throwaway prototyping, rather than evolutionary prototyping, should be used.)
Excessive development time of the prototype: A key property to prototyping is the fact that it is supposed to be done quickly. If the developers lose sight of this fact, they very well may try to develop a prototype that is too complex. When the prototype is thrown away the precisely developed requirements that it provides may not yield a sufficient increase in productivity to make up for the time spent developing the prototype. Users can become stuck in debates over details of the prototype, holding up the development team and delaying the final product.
Expense of implementing prototyping: the start up costs for building a development team focused on prototyping may be high. Many companies have development methodologies in place, and changing them can mean retraining, retooling, or both. Many companies tend to just begin prototyping without bothering to retrain their workers as much as they should.
- A common problem with adopting prototyping technology is high expectations for productivity with insufficient effort behind the learning curve. In addition to training for the use of a prototyping technique, there is an often overlooked need for developing corporate and project specific underlying structure to support the technology. When this underlying structure is omitted, lower productivity can often result.[13]
Applicability
[edit]It has been argued that prototyping, in some form or another, should be used all the time. However, prototyping is most beneficial in systems that will have many interactions with the users.
- It has been found that prototyping is very effective in the analysis and design of on-line systems, especially for transaction processing, where the use of screen dialogs is much more in evidence. The greater the interaction between the computer and the user, the greater the benefit is that can be obtained from building a quick system and letting the user play with it.[6]
Systems with little user interaction, such as batch processing or systems that mostly do calculations, benefit little from prototyping. Sometimes, the coding needed to perform the system functions may be too intensive and the potential gains that prototyping could provide are too small.[6]
Prototyping is especially good for designing good human–computer interfaces. "One of the most productive uses of rapid prototyping to date has been as a tool for iterative user requirements engineering and human–computer interface design."[7]
Dynamic systems development method
[edit]Dynamic Systems Development Method (DSDM)[14] is a framework for delivering business solutions that relies heavily upon prototyping as a core technique, and is itself ISO 9001 approved. It expands upon most understood definitions of a prototype. According to DSDM the prototype may be a diagram, a business process, or even a system placed into production. DSDM prototypes are intended to be incremental, evolving from simple forms into more comprehensive ones.
DSDM prototypes can sometimes be throwaway or evolutionary. Evolutionary prototypes may be evolved horizontally (breadth then depth) or vertically (each section is built in detail with additional iterations detailing subsequent sections). Evolutionary prototypes can eventually evolve into final systems.
The four categories of prototypes as recommended by DSDM are:
- Business prototypes – used to design and demonstrates the business processes being automated.
- Usability prototypes – used to define, refine, and demonstrate user interface design usability, accessibility, look and feel.
- Performance and capacity prototypes – used to define, demonstrate, and predict how systems will perform under peak loads as well as to demonstrate and evaluate other non-functional aspects of the system (transaction rates, data storage volume, response time, etc.)
- Capability/technique prototypes – used to develop, demonstrate, and evaluate a design approach or concept.
The DSDM lifecycle of a prototype is to:
- Identify prototype
- Agree to a plan
- Create the prototype
- Review the prototype
Operational prototyping
[edit]Operational prototyping was proposed by Alan Davis as a way to integrate throwaway and evolutionary prototyping with conventional system development. "It offers the best of both the quick-and-dirty and conventional-development worlds in a sensible manner. Designers develop only well-understood features in building the evolutionary baseline, while using throwaway prototyping to experiment with the poorly understood features."[8]
Davis' belief is that to try to "retrofit quality onto a rapid prototype" is not the correct method when trying to combine the two approaches. His idea is to engage in an evolutionary prototyping methodology and rapidly prototype the features of the system after each evolution.
The specific methodology follows these steps:[8]
- An evolutionary prototype is constructed and made into a baseline using conventional development strategies, specifying and implementing only the requirements that are well understood.
- Copies of the baseline are sent to multiple customer sites along with a trained prototyper.
- At each site, the prototyper watches the user at the system.
- Whenever the user encounters a problem or thinks of a new feature or requirement, the prototyper logs it. This frees the user from having to record the problem, and allows him to continue working.
- After the user session is over, the prototyper constructs a throwaway prototype on top of the baseline system.
- The user now uses the new system and evaluates. If the new changes aren't effective, the prototyper removes them.
- If the user likes the changes, the prototyper writes feature-enhancement requests and forwards them to the development team.
- The development team, with the change requests in hand from all the sites, then produce a new evolutionary prototype using conventional methods.
Obviously, a key to this method is to have well trained prototypers available to go to the user sites. The operational prototyping methodology has many benefits in systems that are complex and have few known requirements in advance.
Evolutionary systems development
[edit]Evolutionary Systems Development is a class of methodologies that attempt to formally implement evolutionary prototyping. One particular type, called Systemscraft is described by John Crinnion in his book Evolutionary Systems Development.
Systemscraft was designed as a 'prototype' methodology that should be modified and adapted to fit the specific environment in which it was implemented.
- Systemscraft was not designed as a rigid 'cookbook' approach to the development process. It is now generally recognised[sic] that a good methodology should be flexible enough to be adjustable to suit all kinds of environment and situation...[6]
The basis of Systemscraft, not unlike evolutionary prototyping, is to create a working system from the initial requirements and build upon it in a series of revisions. Systemscraft places heavy emphasis on traditional analysis being used throughout the development of the system.
Evolutionary rapid development
[edit]Evolutionary Rapid Development (ERD)[15] was developed by the Software Productivity Consortium, a technology development and integration agent for the Information Technology Office of the Defense Advanced Research Projects Agency (DARPA).
- Fundamental to ERD is the concept of composing software systems based on the reuse of components, the use of software templates and on an architectural template. Continuous evolution of system capabilities in rapid response to changing user needs and technology is highlighted by the evolvable architecture, representing a class of solutions. The process focuses on the use of small artisan-based teams integrating software and systems engineering disciplines working multiple, often parallel short-duration timeboxes with frequent customer interaction.
- Key to the success of the ERD-based projects is parallel exploratory analysis and development of features, infrastructures, and components with and adoption of leading edge technologies enabling the quick reaction to changes in technologies, the marketplace, or customer requirements.[9]
To elicit customer/user input, frequent scheduled and ad hoc/impromptu meetings with the stakeholders are held. Demonstrations of system capabilities are held to solicit feedback before design/implementation decisions are solidified. Frequent releases (e.g., betas) are made available for use to provide insight into how the system could better support user and customer needs. This assures that the system evolves to satisfy existing user needs.
The design framework for the system is based on using existing published or de facto standards. The system is organized to allow for evolving a set of capabilities that includes considerations for performance, capacities, and functionality. The architecture is defined in terms of abstract interfaces that encapsulate the services and their implementation (e.g., COTS applications). The architecture serves as a template to be used for guiding development of more than a single instance of the system. It allows for multiple application components to be used to implement the services. A core set of functionality not likely to change is also identified and established.
The ERD process is structured to use demonstrated functionality rather than paper products as a way for stakeholders to communicate their needs and expectations. Central to this goal of rapid delivery is the use of the "timebox" method. Timeboxes are fixed periods of time in which specific tasks (e.g., developing a set of functionality) must be performed. Rather than allowing time to expand to satisfy some vague set of goals, the time is fixed (both in terms of calendar weeks and person-hours) and a set of goals is defined that realistically can be achieved within these constraints. To keep development from degenerating into a "random walk," long-range plans are defined to guide the iterations. These plans provide a vision for the overall system and set boundaries (e.g., constraints) for the project. Each iteration within the process is conducted in the context of these long-range plans.
Once an architecture is established, software is integrated and tested on a daily basis. This allows the team to assess progress objectively and identify potential problems quickly. Since small amounts of the system are integrated at one time, diagnosing and removing the defect is rapid. User demonstrations can be held at short notice since the system is generally ready to exercise at all times.
Tools
[edit]Efficiently using prototyping requires that an organization have the proper tools and a staff trained to use those tools. Tools used in prototyping can vary from individual tools, such as 4th generation programming languages used for rapid prototyping to complex integrated CASE tools. 4th generation visual programming languages like Visual Basic and ColdFusion are frequently used since they are cheap, well known and relatively easy and fast to use. CASE tools, supporting requirements analysis, like the Requirements Engineering Environment (see below) are often developed or selected by the military or large organizations. Object oriented tools are also being developed like LYMB from the GE Research and Development Center. Users may prototype elements of an application themselves in a spreadsheet.
As web-based applications continue to grow in popularity, so too, have the tools for prototyping such applications. Frameworks such as Bootstrap, Foundation, and AngularJS provide the tools necessary to quickly structure a proof of concept. These frameworks typically consist of a set of controls, interactions, and design guidelines that enable developers to quickly prototype web applications.
Screen generators, design tools, and software factories
[edit]Screen generating programs are also commonly used and they enable prototypers to show user's systems that do not function, but show what the screens may look like. Developing Human Computer Interfaces can sometimes be the critical part of the development effort, since to the users the interface essentially is the system.
Software factories can generate code by combining ready-to-use modular components. This makes them ideal for prototyping applications, since this approach can quickly deliver programs with the desired behaviour, with a minimal amount of manual coding.
Application definition or simulation software
[edit]A new class of software called Application definition or simulation software enables users to rapidly build lightweight, animated simulations of another computer program, without writing code. Application simulation software allows both technical and non-technical users to experience, test, collaborate and validate the simulated program, and provides reports such as annotations, screenshot and schematics. As a solution specification technique, Application Simulation falls between low-risk, but limited, text or drawing-based mock-ups (or wireframes) sometimes called paper-based prototyping, and time-consuming, high-risk code-based prototypes, allowing software professionals to validate requirements and design choices early on, before development begins. In doing so, the risks and costs associated with software implementations can be dramatically reduced.[16]
To simulate applications one can also use software that simulates real-world software programs for computer-based training, demonstration, and customer support, such as screencasting software as those areas are closely related.
Requirements Engineering Environment
[edit]"The Requirements Engineering Environment (REE), under development at Rome Laboratory since 1985, provides an integrated toolset for rapidly representing, building, and executing models of critical aspects of complex systems."[17]
Requirements Engineering Environment is currently used by the United States Air Force to develop systems. It is:
- an integrated set of tools that allows systems analysts to rapidly build functional, user interface, and performance prototype models of system components. These modeling activities are performed to gain a greater understanding of complex systems and lessen the impact that inaccurate requirement specifications have on cost and scheduling during the system development process. Models can be constructed easily, and at varying levels of abstraction or granularity, depending on the specific behavioral aspects of the model being exercised.[17]
REE is composed of three parts. The first, called proto is a CASE tool specifically designed to support rapid prototyping. The second part is called the Rapid Interface Prototyping System or RIP, which is a collection of tools that facilitate the creation of user interfaces. The third part of REE is a user interface to RIP and proto that is graphical and intended to be easy to use.
Rome Laboratory, the developer of REE, intended that to support their internal requirements gathering methodology. Their method has three main parts:
- Elicitation from various sources (users, interfaces to other systems), specification, and consistency checking
- Analysis that the needs of diverse users taken together do not conflict and are technically and economically feasible
- Validation that requirements so derived are an accurate reflection of user needs.[17]
In 1996, Rome Labs contracted Software Productivity Solutions (SPS) to further enhance REE to create "a commercial quality REE that supports requirements specification, simulation, user interface prototyping, mapping of requirements to hardware architectures, and code generation..."[18] This system is named the Advanced Requirements Engineering Workstation or AREW.
Non-relational environments
[edit]Non-relational definition of data (e.g. using Caché or associative models) can help make end-user prototyping more productive by delaying or avoiding the need to normalize data at every iteration of a simulation. This may yield earlier/greater clarity of business requirements, though it does not specifically confirm that requirements are technically and economically feasible in the target production system.
PSDL
[edit]PSDL is a prototype description language to describe real-time software.[19] The associated tool set is CAPS (Computer Aided Prototyping System).[20] Prototyping software systems with hard real-time requirements is challenging because timing constraints introduce implementation and hardware dependencies. PSDL addresses these issues by introducing control abstractions that include declarative timing constraints. CAPS uses this information to automatically generate code and associated real-time schedules, monitor timing constraints during prototype execution, and simulate execution in proportional real time relative to a set of parameterized hardware models. It also provides default assumptions that enable execution of incomplete prototype descriptions, integrates prototype construction with a software reuse repository for rapidly realizing efficient implementations, and provides support for rapid evolution of requirements and designs.[21]
References
[edit]- ^ Todd Grimm: The Human Condition: A Justification for Rapid Prototyping. Time Compression Technologies, vol. 3 no. 3. Accelerated Technologies, Inc. May 1998 . Page 1. [1]
- ^ "Software Prototyping - INGSOFTWARE". ingsoftware.com. Retrieved 2018-06-27.
- ^ Smith MF Software Prototyping: Adoption, Practice and Management. McGraw-Hill, London (1991).
- ^ Dewar, Robert B. K.; Fisher Jr., Gerald A.; Schonberg, Edmond; Froelich, Robert; Bryant, Stephen; Goss, Clinton F.; Burke, Michael (November 1980). "The NYU Ada translator and interpreter". Proceeding of the ACM-SIGPLAN symposium on Ada programming language - SIGPLAN '80. Vol. 15. pp. 194–201. doi:10.1145/948632.948659. ISBN 0-89791-030-3. S2CID 10586359.
- ^ SofTech Inc. (1983-04-11). "Ada Compiler Validation Summary Report: NYU Ada/ED, Version 19.7 V-001". Archived from the original on 2012-03-12. Retrieved 2010-12-16.
- ^ a b c d e f John Crinnion: Evolutionary Systems Development, a practical guide to the use of prototyping within a structured systems methodology. Plenum Press, New York, 1991. Page 18.
- ^ a b c S. P. Overmyer: Revolutionary vs. Evolutionary Rapid Prototyping: Balancing Software Productivity and HCI Design Concerns. Center of Excellence in Command, Control, Communications and Intelligence (C3I), George Mason University, 4400 University Drive, Fairfax, Virginia.
- ^ a b c Alan M. Davis: Operational Prototyping: A new Development Approach. IEEE Software, September 1992. Page 71.
- ^ a b Software Productivity Consortium: Evolutionary Rapid Development. SPC document SPC-97057-CMC, version 01.00.04, June 1997. Herndon, Va. Page 6.
- ^ Davis. Page 72-73. Citing: E. Bersoff and A. Davis, Impacts of Life Cycle Models of Software Configuration Management. Comm. ACM, Aug. 1991, pp. 104–118
- ^ Komatineni, Satya. "Reshaping IT Project Delivery Through Extreme Prototyping". Archived from the original on 2016-12-06.
- ^ Adapted from C. Melissa Mcclendon, Larry Regot, Gerri Akers.
- ^ Joseph E. Urban: Software Prototyping and Requirements Engineering. Rome Laboratory, Rome, NY.
- ^ Dynamic Systems Development Method Consortium. https://web.archive.org/web/20060209072841/http://na.dsdm.org/
- ^ Adapted from Software Productivity Consortium. PPS 10–13.
- ^ How Simulation Software Can Streamline Application Development Archived 2012-07-22 at archive.today
- ^ a b c Dr. Ramon Acosta, Carla Burns, William Rzepka, and James Sidoran. Applying Rapid Prototyping Techniques in the Requirements Engineering Environment. IEEE, 1994. [2]
- ^ Software Productivity Solutions, Incorporated. Advanced Requirements Engineering Workstation (AREW). 1996. [3]
- ^ Luqi; Berzins, Yeh (October 1988). "A Prototyping Language for Real-Time Software" (PDF). IEEE Transactions on Software Engineering. 14 (10): 1409–1423. doi:10.1109/32.6186. hdl:10945/39162. S2CID 35348234.
- ^ Luqi; Ketabchi (March 1988). "A Computer-Aided Prototyping System". IEEE Software. 5 (2): 66–72. doi:10.1109/52.2013. hdl:10945/43616. S2CID 15541544.
- ^ Luqi (May 1989). "Software Evolution through Rapid Prototyping". IEEE Computer. 22 (5): 13–25. doi:10.1109/2.27953. hdl:10945/43610. S2CID 1809234.
Software prototyping
View on GrokipediaIntroduction
Definition and Purpose
Software prototyping is the activity of creating incomplete versions of software applications to simulate aspects of functionality, user interfaces, or system behavior prior to full-scale implementation.[5] It involves developing executable models or early samples that represent selected system elements, such as display formats, computed values, or response times, often using diverse media like sketches, mock-ups, or interactive code.[5][4] This approach enables developers and stakeholders to explore problem-solution domains iteratively through tangible representations.[4] The primary purposes of software prototyping include eliciting user feedback to clarify ambiguous requirements, validating technical feasibility and usability, and demonstrating concepts to stakeholders for alignment and decision-making.[4] It facilitates learning by exploring unknowns and discovering issues early, supports communication among teams and customers to refine ideas, and serves as milestones for proof-of-concept or integration testing.[6] By predicting system properties and reducing risks associated with unclear specifications, prototyping enhances quality and supports incremental development.[5][4] Key characteristics of prototypes emphasize simplicity and interactivity, allowing for rapid iteration without committing to final solutions; they may be disposable for validation or evolvable for ongoing refinement.[4] Unlike full software development, which produces production-ready code with comprehensive features and optimizations, prototyping prioritizes speed and simulation to focus on requirements elicitation and risk mitigation rather than completeness or performance.[5][4] Prototypes vary in scope, for instance, along horizontal dimensions that cover broad interfaces shallowly or vertical dimensions that delve deeply into specific functions.[4]Historical Development
Software prototyping emerged in the early 1970s as a response to the software crisis of the late 1960s and early 1970s, a period marked by widespread project failures, budget overruns, and difficulties in eliciting accurate requirements for increasingly complex systems. This crisis was highlighted at the 1968 NATO Software Engineering Conference, where experts noted a growing gap between hardware advances and software reliability, prompting calls for new methodologies to involve users more effectively and reduce rework. Initial concepts of prototyping were debated in academic and industry forums, with early applications appearing in defense and aerospace projects funded by organizations like the U.S. Department of Defense, where iterative mockups helped validate system behaviors under uncertain specifications.[3] In the 1980s, prototyping gained momentum through the rise of fourth-generation languages (4GLs), which facilitated quicker construction of executable models and shifted practices from manual sketches to automated tools, enabling faster feedback loops in requirements engineering. Alan Davis played a pivotal role during this decade, advocating for rapid prototyping via executable specifications in his 1982 paper and later integrating throwaway and evolutionary approaches to balance exploration and refinement in software design.[7][8] These advancements addressed lingering challenges from the software crisis by emphasizing user involvement and iterative validation, laying groundwork for more structured methodologies. The 1990s and 2000s saw prototyping evolve with the advent of rapid application development (RAD), formalized by James Martin in 1991, which incorporated prototyping as a core element for accelerating development in client-server and early web environments, often leveraging object-oriented paradigms for reusable components.[9] By the 2010s, prototyping integrated deeply with agile methodologies—stemming from the 2001 Agile Manifesto—and DevOps practices, enabling continuous integration of prototypes in cloud-based and collaborative workflows to support dynamic, user-centered software evolution. This progression from rudimentary sketches to sophisticated digital tools has continually improved stakeholder engagement and mitigated risks in an era of escalating software complexity.[10]Fundamental Dimensions
Horizontal Prototypes
Horizontal prototypes are user-interface-focused models that provide a broad, surface-level representation of the overall system structure, simulating the "look and feel" across multiple modules or screens without implementing deep functionality.[11][12] They emphasize the presentation and dialogue components of the user interface, allowing stakeholders to explore the range of interactions and navigation paths early in the design process.[11][13] Key characteristics of horizontal prototypes include their shallow depth but wide breadth, often resulting in non-functional mock-ups that prioritize visual and navigational simulation over operational logic.[12][14] These prototypes are typically limited to the frontend layer, using simulated elements to demonstrate user commands, menus, windows, and screens, which helps identify issues like inconsistency or redundancy in the interface design from the user's perspective.[11][15] In contrast to vertical prototypes, which delve into functional depth for a narrow subset, horizontal prototypes offer a comprehensive overview to validate user experience across the system.[13][12] The development approach for horizontal prototypes involves rapid creation using wireframing tools, interface builders, or simple scripting to mock up screens and interactions without integrating a backend or full functional core.[11][16] These prototypes often employ scaffolding or domain adapters to simulate responses, enabling quick iterations and modifications as feedback is gathered, and they can evolve into working code in larger projects.[11] This method is particularly efficient for early-stage exploration, as it allows teams to build and revise the entire interface layer simultaneously.[11] Horizontal prototypes are commonly used in early requirements elicitation to visualize user navigation, workflows, and overall usability, making them ideal for stakeholder walkthroughs and UI/UX validation in web and mobile app design.[14][17] They support gathering feedback on business requirements and interface alternatives without the overhead of functional implementation, and are especially valuable in large software teams or sales demonstrations to convey system scope.[11][18] For instance, a horizontal prototype might consist of a mock dashboard displaying interconnected screens—such as login, overview, and settings pages—with clickable elements simulating navigation but no underlying data processing or backend logic.[12][19]Vertical Prototypes
Vertical prototypes in software prototyping refer to models that provide a deep implementation of one or a few specific subsystems, incorporating complete logic, data handling, and integration while omitting broader user interface elements or other system components.[20] These prototypes slice through all architectural layers for the targeted area, enabling a thorough exploration of functionality without simulating the entire system.[11] Key characteristics of vertical prototypes include high depth in a limited scope, resulting in functional and executable code that demonstrates real performance and behavior.[12] They are typically more technical than surface-level mocks, focusing on proving the viability of algorithms, application programming interfaces (APIs), or backend processes, and often serve as proofs of concept to validate system-level ideas.[11] In contrast to broader explorations, vertical prototypes prioritize precision in selected features, providing full functionality for those elements to uncover potential issues in isolation.[17] The development of vertical prototypes involves coding actual subsets of the target system, which makes them more time-intensive than shallower alternatives but effective for early detection of integration challenges.[21] Developers select a narrow vertical slice—such as a core algorithm or data flow—and build it to production-like standards, testing interactions with real data sources or external components. This approach reveals technical risks before full-scale commitment, though it requires careful scoping to avoid scope creep.[20] Vertical prototypes are particularly useful in use cases like backend validation in enterprise software, where they test data processing and scalability, or algorithm optimization in AI applications to assess computational efficiency and accuracy.[17] For instance, they help identify bottlenecks in high-risk areas, such as security protocols, ensuring feasibility without overextending resources. A representative example is a fully operational login module that includes authentication logic, database connectivity for user verification, and error handling, but excludes ancillary features like user profiles or navigation menus.[12] Such prototypes complement horizontal ones by providing depth where breadth alone falls short, together offering comprehensive system validation.[11]Prototyping Methods
Throwaway Prototyping
Throwaway prototyping involves constructing a preliminary version of a software system with reduced functionality or limited performance early in the development lifecycle, primarily to explore concepts, elicit user feedback, and refine requirements, after which the prototype is intentionally discarded rather than evolved into the final product.[22] This approach, sometimes referred to as rapid or exploratory prototyping, treats the prototype as a temporary artifact focused on discovery rather than implementation.[23] The process typically starts with developing a quick prototype derived from initial functional specifications, often using simulation or mock execution to demonstrate key features.[22] Users then interact with this prototype to provide feedback, which informs revisions to the requirements documentation.[22] Once the specifications are deemed sufficiently clear and validated, the prototype is abandoned, allowing the development team to commence a fresh, structured implementation of the full system without carrying over any prototype artifacts or code.[23] This workflow ensures that ambiguities in user needs are addressed upfront, minimizing costly rework later.[24] Key principles of throwaway prototyping center on risk mitigation in projects characterized by uncertain or evolving requirements, promoting early stakeholder involvement to iteratively shape the system's foundation.[22] Originating in the 1980s amid the rise of rapid prototyping techniques for handling complex software systems, it draws from foundational work on operational specifications and user-centered development processes.[25] The method prioritizes disposability to avoid entrenching early design decisions that may prove suboptimal.[22] Advantages specific to this method include preventing the accumulation of technical debt, as the prototype's potentially hasty or incomplete structure does not influence the production codebase, thereby enabling a more robust and maintainable final system.[24] It also facilitates unbiased requirements clarification, allowing developers to focus solely on gathering insights without the pressure of preserving prototype elements.[23] A representative example is the use of paper-based or digital mockups to prototype the user interface for a new e-commerce platform, where iterations based on user testing solidify layout and interaction requirements before the interface is fully reimplemented in the production environment.[22] Throwaway prototypes in such cases often emphasize horizontal elements, like overall user experience flows, to broadly validate concepts.[22]Evolutionary Prototyping
Evolutionary prototyping is a software development approach in which an initial prototype is constructed to represent core functionality and is progressively refined through iterative cycles of user feedback and enhancement until it becomes the fully deployable system.[7] Unlike methods that discard early models, this technique builds upon the prototype as the foundation for the final product, allowing requirements to solidify over time.[7] The process begins with the creation of a basic prototype based on preliminary user needs, followed by testing and demonstration to stakeholders.[7] Users interact with the prototype, providing feedback that informs revisions to requirements, design, and implementation; this cycle repeats, incorporating enhancements such as additional features or performance improvements, until the system reaches maturity and meets all specified criteria.[7] This method is particularly suited to projects where requirements are likely to evolve, as it accommodates changes without restarting development from scratch.[26] Key principles of evolutionary prototyping emphasize user-centered design and adaptability, with continuous stakeholder involvement driving refinements to ensure the system aligns with practical needs.[7] It contrasts with rigid sequential models like the waterfall approach by explicitly embracing requirement changes as an integral part of development, fostering a flexible lifecycle. This paradigm was notably advanced in the 1980s through the work of Alan Davis, who integrated evolutionary elements into broader prototyping strategies to support iterative system building. Unique challenges in evolutionary prototyping include the risk of scope creep, where uncontrolled additions to requirements can inflate project timelines and costs, necessitating rigorous risk assessment and negotiation protocols to maintain focus.[26] Additionally, the iterative nature demands robust version control mechanisms, such as systematic documentation and design tracking across prototype releases, to manage evolving codebases and prevent integration issues.[26] A representative example is the development of the SITINA SCADA/EMS system for monitoring hydroelectric power plants, where an initial prototype was iteratively refined over 14 months through four cycles of analysis, design, implementation, and user evaluation, ultimately yielding two deployable versions tailored to evolving operational needs.[27]Incremental Prototyping
Incremental prototyping is a software development method that breaks down a complex system into smaller, manageable modules or components, where each module is prototyped independently before being integrated into the overall system. Each increment results in a deliverable portion of working functionality, allowing for progressive construction of the final product. This approach enables developers to focus on specific features without addressing the entire system at once, facilitating early validation and refinement based on stakeholder feedback.[28] The process begins with identifying and prioritizing core features or modules based on project requirements and user needs. Developers then create a prototype for the first increment, conduct thorough testing—including unit and integration tests—to ensure functionality and compatibility, and integrate it into the baseline system. Subsequent increments follow the same cycle: prototyping the next module, testing it both in isolation and within the existing structure, and incorporating it progressively. This iterative workflow aligns closely with modular design principles, promoting reusability and scalability while accommodating changes in requirements as the project advances.[29] Key principles of incremental prototyping include managing large-scale projects by mitigating risks through small, controlled additions rather than a monolithic build, and enabling the early delivery of essential features to provide immediate value to users. It evolved from 1990s Rapid Application Development (RAD) practices, which emphasized time-boxed iterations and user involvement to accelerate development cycles, as formalized in methods like the Dynamic Systems Development Method (DSDM). Unlike evolutionary prototyping, which continuously refines a single evolving prototype, incremental prototyping prioritizes distinct, additive modules that build upon each other in a structured manner. A distinctive aspect of this method is the emphasis on integration testing at the conclusion of each increment, which verifies interactions between new and existing components to prevent issues from propagating. This makes incremental prototyping particularly suitable for phased rollouts, where increments can be deployed to users in stages, allowing for real-world monitoring and adjustments without disrupting the entire system. For instance, in building an e-commerce platform, the initial increment might prototype and integrate user authentication and basic product browsing, followed by subsequent increments adding shopping cart functionality and payment processing, each tested and rolled out progressively to expand capabilities.[28]Extreme Prototyping
Extreme prototyping is a software prototyping technique primarily employed in web application development, designed to accelerate the creation of functional prototypes through a structured, three-phase approach that emphasizes speed and iteration. This method breaks down the development process into sequential stages, allowing teams to quickly visualize, simulate, and implement features while minimizing initial manual coding efforts.[30] The process begins in Phase 1 with the construction of a static prototype, consisting of basic HTML pages or wireframes that represent all existing screens without interactive elements, enabling early user feedback on layout and navigation. In Phase 2, functionality is added by simulating data processing through a rules engine or dynamic screen generation, often using scripting languages to create skeletal code for business logic and user interactions, such as form validations. Finally, Phase 3 integrates full services, including real database connections and complete navigation flows, evolving the prototype into a deployable application. This phased progression, inspired by extreme programming principles, promotes automation via templates and rules-based systems to reduce development time and support agile responses to market needs.[17][30] Key to extreme prototyping is its focus on rapid cycling in web-centric environments, where it facilitates centralized team efforts on deliverable outputs rather than exhaustive upfront specifications, making it ideal for projects requiring quick adaptations. Unique aspects include heavy reliance on scripting tools and template engines to automate UI generation and logic simulation, thereby minimizing custom code until the final phase and differing from incremental prototyping by prioritizing extreme acceleration through predefined automation layers. For instance, a team might rapidly prototype a web form by first creating static HTML in Phase 1, then applying rules for input validation in Phase 2 using a simple engine, before integrating live database operations in Phase 3 to handle user submissions dynamically.[30][17]Prototyping Process
Stages and Workflow
The software prototyping process typically follows an iterative workflow that enables developers to refine system requirements and designs through successive approximations of the target software. This approach begins with initial requirements elicitation and progresses through construction, evaluation, and refinement cycles, allowing for early detection of issues and alignment with user needs.[31] The process is adaptable to different project contexts, emphasizing rapid development to facilitate feedback loops rather than complete implementation.[32] Core stages in the prototyping workflow include:- Requirements gathering and planning: Stakeholders, including end-users and developers, collaborate to identify and document functional and non-functional needs, often through interviews, surveys, or analysis of existing systems. This stage sets clear objectives for the prototype, such as validating user interfaces or exploring technical feasibility, to guide subsequent efforts.[33][31]
- Prototype design and build: Based on the requirements, a preliminary design outline is created, followed by rapid construction of an executable model using tools like wireframing software or high-level languages. The focus is on core functionalities, relaxing non-essential constraints like performance to accelerate development.[32]
- User review and feedback collection: The prototype is presented to users or stakeholders for interaction, often via scenario-based testing in controlled environments, to gather qualitative and quantitative insights on usability and fit.[31][33]
- Analysis and refinement: Feedback is analyzed to identify gaps or errors, leading to targeted revisions of the prototype. This stage includes documenting lessons learned to inform future iterations.[32]
- Decision on discard or evolve: Upon completion of cycles, the team decides whether to discard the prototype (as in throwaway approaches) or evolve it toward the final system, based on validated requirements.
Evaluation and Iteration
Evaluation in software prototyping involves systematic assessment techniques to gauge the prototype's effectiveness in meeting user needs, functional requirements, and performance expectations. Usability testing, such as the think-aloud protocol, allows participants to verbalize their thoughts while interacting with the prototype, revealing navigation issues, comprehension barriers, and overall user experience flaws.[34] Performance metrics, including load times and response latencies, are measured to evaluate technical feasibility, particularly in vertical prototypes simulating core system behaviors.[35] Stakeholder reviews facilitate direct input from end-users, developers, and clients, while requirement validation checklists ensure alignment with initial specifications by cross-referencing prototype features against documented needs.[36] Iteration strategies transform evaluation feedback into actionable improvements, emphasizing prioritization to maintain project momentum. The MoSCoW method, originating from the Dynamic Systems Development Method (DSDM), categorizes feedback into Must-have, Should-have, Could-have, and Won't-have items to focus refinements on high-impact changes.[37] Version control systems, like Git, track modifications across iterations, enabling rollback and collaboration while documenting the evolution from initial to refined prototypes. Decisions on the prototype's fate—whether to refine further, expand into full development, or discard—rely on aggregated feedback to avoid sunk-cost fallacies.[38] Key metrics quantify iteration success and guide decisions. User satisfaction scores, often gathered via standardized questionnaires like the System Usability Scale (SUS), measure perceived ease and enjoyment post-testing.[39] Defect rates track identified issues per prototype version, indicating improvement trends, while alignment with initial goals is assessed through traceability matrices linking features to requirements. Tools supporting A/B testing compare prototype variants by exposing user groups to alternatives and analyzing engagement metrics like completion rates.[40] Challenges in evaluation and iteration include managing subjective feedback, which can vary widely based on individual user biases and lead to conflicting priorities.[41] Over-iteration poses risks of resource depletion without proportional gains, particularly under time constraints where additional cycles yield diminishing returns.[42] For instance, a heuristic evaluation of a UI prototype might apply Nielsen's 10 usability heuristics to identify issues like inconsistent navigation, prompting iterations such as streamlined menus and clearer labeling to enhance user flow.[43]Benefits and Challenges
Advantages
Software prototyping offers significant risk mitigation by enabling the early identification and resolution of potential issues in the development process. According to Boehm's cost-to-fix curve, the expense of correcting defects escalates exponentially as projects progress, with fixes in later stages potentially costing up to 100 times more than those addressed during initial requirements or design phases; prototyping counters this by surfacing ambiguities and flaws through tangible models before substantial resources are committed.[44] This approach is particularly effective for high-risk elements, such as complex user interfaces or integration points, allowing teams to prioritize and de-risk critical areas iteratively.[45] One of the primary advantages is enhanced communication between stakeholders, including developers, users, and clients. Visual and interactive prototypes serve as concrete artifacts that bridge gaps in understanding, clarifying ambiguous specifications and fostering collaborative discussions that reduce misinterpretations.[4] For instance, low-fidelity prototypes facilitate rapid feedback loops, enabling non-technical users to articulate needs more effectively without relying solely on abstract textual descriptions.[46] Prototyping accelerates time-to-market by streamlining requirements validation and incorporating iterative feedback, which shortens the overall development cycle. By testing assumptions early, teams can refine features based on real user input, avoiding prolonged debates and enabling quicker progression to implementation.[45] Studies indicate that integrating prototypes into agile workflows can reduce development time, as rapid iterations align deliverables more closely with evolving needs and minimize rework.[47] User satisfaction is notably improved through early stakeholder involvement, which ensures that the final product aligns closely with actual requirements and supports creative exploration of design alternatives. Prototypes allow users to interact with simulated functionalities, providing insights into usability and preferences that enhance overall acceptance and reduce post-deployment dissatisfaction.[48] This involvement not only validates user-centric features but also boosts motivation among development teams by making abstract concepts tangible.[4] In terms of cost-effectiveness, throwaway prototyping prevents investment in incorrect features by discarding non-viable elements after validation, thereby avoiding expenses associated with building flawed components from scratch.[33] Conversely, evolutionary prototyping reuses refined elements across iterations, maximizing the value of initial efforts and leading to more efficient resource allocation over the project's lifecycle.[49]Disadvantages
Software prototyping, while valuable for eliciting requirements, introduces several potential drawbacks that can impact project efficiency and outcomes. One primary concern is the time and cost overhead associated with developing and iterating on prototypes. Initial prototyping efforts can extend project timelines, particularly when iterations become uncontrolled, and may prove unsuitable for projects with well-defined requirements where traditional methods suffice more efficiently.[33] In some cases, prototyping costs can represent a significant portion of the overall budget without careful scoping.[33] Another risk is scope creep, where user feedback during iterations prompts expansions to requirements that exceed the original project boundaries, resulting in feature bloat and unplanned work. This occurs because the iterative nature of prototyping encourages ongoing refinements, which can blur the line between essential adjustments and unnecessary additions if not tightly managed.[50] In evolutionary prototyping approaches, technical debt often accumulates as rushed implementations prioritize functionality over robust design, necessitating substantial refactoring in later stages to address maintainability issues. Continual changes to the prototype can corrupt the underlying system structure, making long-term maintenance more difficult and expensive, especially in large-scale or long-lifetime systems.[33] Stakeholders may also harbor misconceptions about prototypes, mistaking them for near-final products and fostering unrealistic expectations regarding delivery timelines, functionality, or quality. Without explicit communication of prototype objectives, users might focus on superficial features while overlooking deeper environmental or integration challenges, leading to dissatisfaction when the final system diverges.[33][4] Prototyping is resource-intensive, demanding skilled facilitators, specialized tools, and motivated teams to execute effectively; less experienced groups may struggle with the rapid development demands. It is particularly challenging for non-interactive systems, such as embedded software, where hardware dependencies and real-time constraints limit the feasibility of quick iterations, often resulting in high initial costs and resource overuse without proportional benefits.[33][51]Applications in Development
Integration with Agile Methodologies
Software prototyping integrates seamlessly with agile methodologies by serving as tangible artifacts that support iterative development cycles, particularly in refining product backlogs and facilitating demo sessions for stakeholder validation. In practices like Scrum and Kanban, prototypes enable the visualization of user stories, bridging abstract requirements with concrete representations to enhance team alignment and reduce miscommunication early in the process. This approach aligns with agile's emphasis on frequent feedback, allowing prototypes to evolve based on real-time input from cross-functional teams.[52][53] Within Scrum, prototyping plays a pivotal role during sprint planning through spike tasks, which are time-boxed investigations involving the creation of prototypes to explore technical uncertainties or unknowns. These spikes help de-risk complex features by producing quick, disposable prototypes that inform backlog prioritization. Evolutionary prototypes, in particular, align with Scrum's iterative nature, evolving incrementally with the product backlog as user feedback refines requirements across sprints.[54] In Kanban, prototyping supports a continuous flow-based workflow, where tasks related to prototype development are tracked on visual boards to enforce work-in-progress (WIP) limits and promote steady progress toward delivery. This visualization ensures that prototyping efforts do not bottleneck the overall pipeline, enabling teams to pull prototype tasks as capacity allows and integrate them into ongoing releases without fixed sprint boundaries.[53] The benefits of this integration include accelerated creation of minimum viable products (MVPs), as prototypes allow for rapid validation of core functionalities and alignment with agile ceremonies like daily standups, where early feedback loops drive continuous improvement. By embedding prototyping in these practices, teams mitigate risks associated with requirement ambiguity and enhance overall development velocity.[54][53] Post-2020 trends highlight AI-assisted prototyping in agile environments, where machine learning tools automate initial design generation and iteration, reducing manual effort and enabling faster cycles within sprints or flows. As of 2025, advancements include generative AI agents that autonomously create code and UI prototypes, further accelerating development as seen in tools like GitHub Copilot extensions for prototyping.[55][56] Additionally, low-code platforms like OutSystems have gained traction for agile prototyping, offering visual development environments that support quick assembly of functional prototypes and daily evolutionary updates to accommodate changing priorities.[57] A practical example involves a development team prototyping a user interface feature during a two-week Scrum sprint: the initial prototype is built as part of a spike task, demonstrated in the sprint review for feedback, and refined in the subsequent retrospective to inform backlog adjustments, ensuring alignment with evolving user needs.[53]Other Frameworks and Techniques
The Dynamic Systems Development Method (DSDM) positions prototyping as a foundational practice within its structured, timeboxed framework, where iterative development occurs in fixed-duration cycles to ensure timely delivery while accommodating evolving requirements. Prototyping in DSDM emphasizes collaborative creation of functional models during functional model iterations, allowing stakeholders to validate system viability early and refine solutions through user feedback. Facilitated workshops play a central role, enabling cross-functional teams to co-develop prototypes that capture business needs, such as modeling user interfaces or process flows, fostering consensus and reducing misunderstandings. This approach aligns with DSDM's sixth principle of iterative development, which mandates building incrementally to mitigate risks and deliver business value progressively.[58] Operational prototyping extends prototyping techniques to high-stakes environments, particularly in defense and mission-critical systems, by deploying real-time simulations directly into live operational settings to test feasibility under actual conditions. These prototypes, often left in the field for ongoing warfighter evaluation if successful, focus on deployable models that address urgent capability gaps, such as integrating sensors or command systems in tactical scenarios. The method employs a "test-analyze-fix-test" cycle to iteratively resolve integration and reliability issues, thereby reducing technical risks before full-scale commitment. In high-risk domains like defense acquisitions, this technique ensures prototypes evolve into operational assets, validating performance in realistic threats without disrupting primary missions.[59] Evolutionary systems development incorporates long-term prototyping to support adaptive software architectures, often integrating with the spiral model to handle uncertainty through risk-driven iterations. In this paradigm, prototypes serve as expanding increments of operational software, refined over multiple cycles based on user feedback to accommodate changing needs, such as in user-interface heavy applications where requirements solidify only through interaction. Barry Boehm's spiral model exemplifies this by selecting evolutionary prototyping when risks like performance or usability dominate, allowing systems to evolve from initial viable models into robust, adaptable platforms over extended periods. For instance, in the TRW Software Productivity System, evolutionary prototypes facilitated reuse and rework, achieving 93% code reuse across projects and substantial productivity gains.[60] Evolutionary rapid development accelerates system assembly by combining short prototyping cycles with commercial off-the-shelf (COTS) component integration, as outlined in the Evolutionary Process for Integrating COTS-Based Systems (EPIC). This method uses iterative phases—Inception for proof-of-concept prototypes, Elaboration for architectural validation, Construction for production-ready builds, and Transition for fielding—to evaluate COTS compatibility through executable representations that simulate end-to-end functionality. Prototyping here mitigates marketplace-driven risks, such as component obsolescence, by enabling rapid synthesis and stakeholder testing of integrated solutions in experimentation facilities. EPIC's fast cycles ensure COTS selections align with business processes, transitioning throwaway exploratory models into evolutionary ones for efficient deployment.[61] Hybrid approaches adapt prototyping selectively to traditional frameworks, limiting its use to specific phases for targeted benefits without overhauling the entire process. In the waterfall model, prototyping is confined to the requirements gathering stage as a tool to clarify ambiguities and validate user needs, producing mock-ups or partial models that inform specifications before proceeding to sequential design and implementation. This integration helps address design uncertainties early, as seen in educational and engineering contexts where prototypes evolve into final requirements documents. Emerging hybrids in DevOps incorporate prototyping into continuous integration/continuous delivery (CI/CD) pipelines for automated testing of experimental components, such as ad-hoc builds to validate integrations before production, enhancing agility in otherwise linear workflows.[62][63][64] For example, in a DSDM project implementing an enterprise resource planning (ERP) system, facilitated workshops utilize collaborative prototyping to define and iterate on business rules, such as order processing workflows, ensuring alignment with organizational policies through rapid model refinement and stakeholder validation.[58]Tools and Technologies
Types of Prototyping Tools
Software prototyping tools encompass a diverse range of categories designed to facilitate the creation of preliminary models that validate design concepts, user interfaces, and system behaviors early in the development lifecycle. These tools vary from visual interface builders to simulation environments and specialized languages, enabling developers and stakeholders to iterate without full implementation. Horizontal prototyping tools, which focus on developing a single layer such as the user interface, are particularly common for initial mockups.[11] Screen generators and GUI builders form a foundational category for rapid UI mockups, allowing users to create interactive visual representations through drag-and-drop interfaces and pre-built components. These tools emphasize visual fidelity and user experience simulation, enabling quick assembly of screens without deep coding knowledge. For instance, they support the generation of static or clickable prototypes to test layout and navigation flows. This approach accelerates feedback loops by focusing on the front-end layer independently of backend logic.[11] Simulation and application definition software represent another key class, geared toward modeling system behavior and processes without writing production code. These tools use diagrammatic or declarative methods to define application logic, data flows, and interactions, often employing process flow simulators to visualize dynamic operations. By simulating real-world scenarios, they help identify bottlenecks or usability issues prior to integration, reducing risks in complex systems. Such software is essential for prototyping distributed or embedded applications where behavioral accuracy is critical.[65] Requirements engineering environments integrate prototyping capabilities with specification management, providing platforms that link visual prototypes directly to formal requirements documents. These tools support traceability by mapping prototype elements—such as UI components or workflow steps—to specific requirements, ensuring that changes in one area propagate to others. This bidirectional linkage facilitates validation and verification during iteration, maintaining alignment between stakeholder needs and prototype evolution. Early systems in this category automated requirements bookkeeping for software projects, enhancing documentation and compliance.[3] Non-relational and database prototyping tools address data model simulations in NoSQL contexts, enabling the design and testing of flexible schemas for unstructured or semi-structured data. These tools allow visualization and prototyping of document, key-value, or graph-based structures, simulating query performance and data relationships without a live database. For example, they generate forward-engineered scripts or visual diagrams to explore scalability in big data scenarios. This category is vital for modern applications handling diverse data types, where rigid relational models fall short.[66] Domain-specific languages (DSLs) constitute an older but foundational category for specialized simulations, particularly in areas like protocol design. DSLs tailored to a domain, such as PSDL (Prototype System Description Language) for describing real-time software systems including protocol interactions, provide concise syntax to model behaviors and generate prototypes automatically. These languages abstract complex details into domain-relevant constructs, supporting simulation of protocol interactions and validation against specifications. Their use in prototyping has influenced formal methods in network and embedded systems development.[67] Emerging categories include low-code/no-code platforms for hybrid prototypes, which combine visual development with minimal scripting to build functional models spanning UI, logic, and data layers. These platforms democratize prototyping by enabling non-developers to assemble applications via drag-and-drop, while supporting extensions for custom needs. Additionally, AI generators for auto-layout automate UI creation from textual descriptions or sketches, producing responsive designs and prototypes with intelligent component placement. This integration of AI enhances speed and creativity, particularly for iterative UI exploration in agile environments.[68][69]Modern Examples and Trends
In recent years, Figma has emerged as a leading tool for collaborative UI/UX prototyping, enabling real-time editing and multi-user interaction directly in the browser without requiring software installation.[70] Its features include interactive prototyping with auto-animate transitions, component libraries for scalable design systems, and integration with developer handoff tools like Dev Mode for exporting code snippets.[71] Adobe XD, while historically prominent for vector-based high-fidelity mocks and voice prototyping, has seen limited development since 2023, with Adobe focusing maintenance updates rather than new features as of 2025.[72] Sketch remains a preferred option for Mac users, specializing in vector design and seamless handoff to developers through plugins and export options like SwiftUI code generation. Advanced platforms continue to push boundaries in interactivity and specificity. Axure RP excels in wireframing with conditional logic, dynamic panels, and data-driven simulations, making it ideal for enterprise-level UX flows requiring adaptive behaviors. Proto.io focuses on mobile-first simulations, offering drag-and-drop interfaces for high-fidelity prototypes with touch gestures, sensor integration, and HTML5 exports for cross-device testing. As of 2025, key trends in software prototyping emphasize AI integration, no-code platforms, and immersive technologies. AI tools like Figma's Make feature allow users to generate prototypes from text prompts, automating layout suggestions and component creation to accelerate ideation.[73] Adobe Firefly, integrated into Adobe's ecosystem, enables auto-prototyping of visual elements such as UI icons and backgrounds through generative AI, reducing manual design time. No-code tools like Bubble facilitate functional prototypes by enabling visual assembly of databases, workflows, and APIs without coding, suitable for full-stack app simulations. VR/AR prototyping has gained traction for immersive applications, with tools like Unity providing no-code scene builders and interaction scripting to prototype spatial user experiences rapidly. Figma exemplifies the pros and cons of these modern tools: its strengths include robust team collaboration via live cursors and comments, plus a free tier for individuals, fostering inclusive design processes.[74] However, it presents a learning curve for advanced animations and can experience performance lags with large files.[75] The field has evolved significantly from 1990s tools like the Prototype System Description Language (PSDL), a specification-based system for real-time software prototypes using reusable Ada components. Contemporary cloud-based, AI-enhanced suites have shifted toward visual, collaborative environments, with generative AI cutting software development time by 30-50% through faster iteration and automation.[76] For instance, designers can use Figma to build a clickable web app prototype by importing AI-suggested components from text descriptions, linking frames for user flows, and sharing for real-time feedback, streamlining the path from concept to testable mockup.[73]References
- https://sebokwiki.org/wiki/Incremental_Development_Approach
