In Software Engineering, a prototype generally refers either to a breadboard (or evolutionary) prototype or a throwaway (or one-off) prototype. Breadboard prototypes are often software in a development stage, focusing on a subset of the total requirements for a product. These prototypes usually are intended to evolve into the final design. Project managers may formally identify a software component as prototype to communicate with stakeholders that the component may or may not comprise the techniques ultimately allocated to the product design, or to meet business objectives.
It should not be assumed that the prototype is merely for testing concepts (throwaway). That would be an aspect of a "research" project or "proof of concept." Prototypes provide the software developers with a "working model" for demonstration or use by customers, quality-assurance, business analysts, and managers to confirm or make changes to requirements, help define interfaces, develop collaborating components, and to provide proof of incremental achievement of scheduled contractual agreements. Software prototyping serves any and all of these purposes in practice.
Extreme Programming uses iterative design to gradually add one feature at a time to the initial prototype, attempting to minimize "irreducible complexity".
Continues learning approaches within organizations or businesses may also use the concept of business or process prototypes through software models.