1. A computer implemented method of assembling a software solution, comprising: storing, in a memory of said computer, a plurality of software building blocks each having a functional software component and a meta data component, the meta data component describing one or more attributes of the software solution; generating logical relationships between said plurality of software building blocks based on said meta data components; receiving inputs for selecting a subset of building blocks from among said plurality of software building blocks for use in the software solution; and generating a description file describing the subset of building blocks and the logical relationships between the software building blocks in said subset of building blocks; wherein the plurality of software building blocks comprises a first software building block that includes a first meta data component, wherein the one or more attributes of the first meta data component specify the plurality of software building blocks compatible with the first software building block.