1. A computerized method for developing software programs, the method comprising: communicating a specification for the design of a software program to a first plurality of developers; receiving, from each of a subset of the first plurality of software developers, in response to the communicated specification, a design for the software program; facilitating a design review process for scoring each of the received designs; selecting one design from the received designs based at least in part on its score in the design review process; communicating the selected design to a second plurality of software developers; receiving, from each of a subset of the second plurality of software developers, in response to the communicated design, a software program; facilitating a software review process for scoring each of the received programs; and selecting one program from the received programs based at least in part on its score in the software review process.