"In one aspect, a specification for the design of a software program such as a component, an application, a module, or a library is communicated to a first plurality of developers, who in some cases may be geographically distributed." . . . .