1. A method comprising: storing, by a processor in a first record in a computer readable storage medium, data relating to software program compatibility, wherein the software program compatibility is determined in view of at least one of a processing compatibility or a bandwidth compatibility, wherein the first record comprises a first data element identifying a first software program from a first provider in a cloud and a second data element identifying one or more software programs compatible with the first software program, and wherein the one or more software programs comprise a second software program from a second provider, and wherein the second software program is different from the first software program; storing, in a second record, data relating to a plurality of software appliances and a plurality of software programs associated with each of the plurality of software appliances; receiving a request to design a new software appliance; determining alternative sets of software programs that can be used to design the new software appliance in view of the second record; generating a plurality of designs of the new software appliance, wherein each design is associated with a set of software programs that are determined compatible in view of the first record; presenting, on a graphical user interface, the plurality of designs of the new software appliance; and in response to receiving a selection of a design of the plurality of designs of the new software appliance through the graphical user interface, generating a specification for the new software appliance, wherein the specification comprises the set of software programs associated with the selected design.