Automated design tools help to capture the benefits of customization in embedded system design while not exceeding design budgets. Such design tools must understand and exploit the hierarchical structure of design spaces, because systems of any significant complexity typically consist of components (subsystems). In order to reduce the design cost for such systems, designers develop the best component designs and restrict the number of system designs that they evaluate to those formed by combining these component designs. This report formalizes this overall approach. A decomposition splits a system design space into smaller design spaces, one for each of the components. The validity function determines whether a particular composition of component designs is a valid system design. We develop efficient ways to filter component designs from further consideration with minimal or no effect on the quality of system designs. First, we use a component-level validity filter to exclude component designs that are not part of any system design. Second, we split each of the remaining component designs into smaller predicated spaces, such that designs from only certain combinations of these spaces generate all valid designs. Finally, we employ component-level evaluation functions to generate high quality component designs. We show how these results were applied in the automated design of an embedded system consisting of a processor, hardware accelerator and cache memory hierarchy.