The software industry is growing at a phenomenal rate. We have a never-ending desire to solve more and more complex problems with software. As systems become more complex, it becomes increasingly difficult to determine user needs. Early determination of user needs is critical to risk reduction. The best way to assess what users really need is to give them a “working” system. Software prototyping is the process of producing a partial system early in the development cycle to ascertain these needs. This article provides a variety of taxonomies for software prototypes, explores criteria for determining when prototyping is a good idea, surveys available techniques, and describes some case studies of using prototyping with successful results. Our team has developed specific capabilities to create complex prototypes using various technologies. The prototypes are replacing labor-intensive consulting work and save money by a better alignment between customer needs and software providers’ understanding.