Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

I have notes about various methods of prototyping, and I found several definitions on the Internet, but I would like to confirm what I learned.

I understand that throwaway prototyping is developed from an outline of a specification, an various prototypes are delivered and modified until the client is satisfied with its functionality.

On the other and, evolutionary prototypes are built from basic requirements gathered from end-users. An initial prototype is presented to the users and evaluated. The prototype is modified based on the feedback until the client is satisfied.

Is this correct? Are there better definitions of throwaway and evolutionary prototyping?

share|improve this question

migrated from stackoverflow.com Sep 19 '11 at 23:25

This question came from our site for professional and enthusiast programmers.

2  
More often then not it seems that the prototype evolves into the finished product. Never really heard of the throwaway versus evolutionary before. –  itsmatt Sep 19 '11 at 16:46
1  
Hi Mifas, I'm sorry this got migrated, but if you got your definitions from the web, asking the web to confirm if the definitions are correct is circular and not really on-topic here. –  user8 Sep 19 '11 at 23:48
1  
@MarkTrapp If we removed the definitions, could we reopen? Both the definitions in the post as well as the existing answer are wrong in terms of the formal definition of the phrase. There are duplicates on Stack Overflow, but none that I can find here and I think it's essential to, at the very least, not put more false information on the Internet. –  Thomas Owens Sep 19 '11 at 23:51
    
@Mifas If you remove the definitions, there's no body to the question, is there? If Mifas were to follow the question here and update it to explain what he's trying to do that's got him asking about these definitions, that'd be a perfectly fine question. –  user8 Sep 19 '11 at 23:59
1  
@Mark Fantastic. Thanks. Working on my answer now. –  Thomas Owens Sep 20 '11 at 0:14
show 3 more comments

2 Answers

Both methods of prototyping are used when there's some aspect of the system that you don't entirely understand. However, the key difference is the lifecycle methodology that you use. With evolutionary prototyping, you typically understand some aspects of the system and aren't sure about others. In throwaway prototyping, you have a general lack of understanding that you need to complete before you can build a production-ready system.

Note that there are lots of kinds of throwaway prototyping, and neither are limited to the entire system. For example, using paper or whiteboard sketches of a user interface can be considered throwaway prototyping. Yes, you might go through several iterations and throw away a previous design, but you also won't use the final prototype in the system (it's not physically possible, for one).

If you're interested in general software engineering topics and the breadth of SE, I'd highly suggest picking up the Sommerville book that I quote. It's really good for covering the breadth of topics. If you're more interested in process models and methodologies and how you can apply them to various projects, I'd recommend the McConnell book - it has an entire chapter devoted to evolutionary prototyping and another chapter devoted to throwaway prototyping.

I also took a quick glance at the Wikipedia article on software prototyping. Some parts of it are a little weird (at least on my quick read), but there doesn't appear to be anything that I downright disagree with. Some of it is a little focused on one particular aspect, but it's not factually wrong that I see. I prefer the definitions below, but it might be an interesting read on various types of prototyping.


Evolutionary Prototyping

Exploratory development where the objective of the process is to work with the customer to explore their requirements and deliver a final system. The development starts with the parts of the system that are understood. The system evolves by adding new features proposed by the customer. (Sommerville: Software Engineering, 8th Edition)


Evolutionary Prototyping is a lifecycle model in which the system is developed in increments so that it can readily be modified in response to end-user and customer feedback. Most evolutionary-prototyping efforts begin by prototyping the user interface and then evolving the completed system from that, but prototyping can start with any high-risk area. Evolutionary Prototyping is not the same as Throwaway Prototyping, and making the right choice about whether to develop an evolutionary prototype or a throwaway prototype is one key to success. Other keys to success include using experienced developers, managing schedule and budget expectations, and managing the prototyping activity itself. (McConnell: Rapid Development: Taming Wild Software Schedules)


Throwaway Prototyping:

Throwaway prototyping is where the objective of the evolutionary development process is to understand the customer's requirements and hence develop a better requirements definition for the system. The prototype concentrates on experimenting with the customer requirements that are poorly understood. (Sommerville: Software Engineering, 8th Edition)


With Throwaway Prototyping, code is developed to explore factors critical to the system's success, and then that code is thrown away. The prototyping implementation uses programming languages or development practices or both that are much faster than the target language and practices. The user interface is prototyped far more commonly than any other part of the system, but other parts of some systems can also benefit from being prototyped. When used as a requirementsspecification aid, the Throwaway Prototyping practice can accelerate projects based on traditional lifecycle models, such as DoD projects. It can be initiated at either a management or technical level. (McConnell: Rapid Development: Taming Wild Software Schedules)

share|improve this answer
    
+1 Thank you for this. First class. –  Slomojo Sep 20 '11 at 0:37
    
@Slomojo There's still more I want to do with it, I think. I want to try to summarize both definitions for each type of prototyping into something a little more concise (like two or three sentences for each type of prototyping), but I'm not feeling writing right now. Perhaps tomorrow evening I'll revisit this. –  Thomas Owens Sep 20 '11 at 0:41
    
+1 Nice answer and thanks for "pulling a diamond out of the rough". –  Kev Sep 20 '11 at 1:17
    
@ThomasOwens - Not sure further summary is really necessary, but that's your prerogative. The text is clear and concise from my pov. –  Slomojo Sep 20 '11 at 1:28
add comment

The buzzwords are fluff and inconsequential. "Throwaway", "Evolutionary", whatever floats your boat. They're both prototypes. It's the first one you build by whatever means are handy. Most prototypes get thrown away afterwards. Most prototypes change during the process.

Making up new terms that don't serve any purpose doesn't help anybody.

share|improve this answer
1  
Do prototypes really get thrown away? I have always heard people complaining that their prototypes (which they weren't particularly proud of) got morphed into the final system. –  Mike Daniels Sep 19 '11 at 23:47
1  
Incorrect per the definition of Evolutionary Prototyping on pp443 of McConnell's Rapid Development, the definition of Throwaway Prototyping on pp569 of McConnell's Rapid Development, the definitions of exploratory development and throwaway prototyping on p68 of Sommerville's Software Engineering 8th Edition, and the definition of evolutionary process models on pp51-59 of Pressman's Software Engineering: A Practitioner's Approach (6th Edition). –  Thomas Owens Sep 20 '11 at 0:13
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.