1. A method of assembling a software solution, comprising: storing 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.