A method for designing a new product includes automatically identifying a plurality of components of stored products, wherein the plurality of components is associated with an existing component included in a design of the new product, automatically selecting a new component from among the plurality of components, wherein a relationship between the existing component and the new component optimizes a design objective for the new product, automatically adding the new component to the design for the new product, and iteratively repeating the identifying, the selecting, and the adding until a stopping criterion is met, wherein the design for the new product is complete when the stopping criterion is met.