This invention relates to methods and a system for developing software. In one embodiment, a method for developing software includes communicating a specification for the design of a software program to a first plurality of developers, in response to the specification, receiving a design from a subset of the developers to a subset of the developers, facilitating a design review process for scoring the designs, selecting one design based on its score, communicating the selected design to a second plurality of software developers, in response to the design, receiving software programs from a subset of the second plurality of developers, facilitating a software review process for scoring the programs, and selecting one program based on its score. In another embodiment, a method for the distributed development of software includes providing a software development system to a distributed community of developers, the system including software development software that utilizes a structured development methodology, a communication server, and a review board for determining the quality of submitted software; accepting a request to create a software program; and facilitating the development of the program by a subset of the distributed community of developers using the software development system.