To help with top-down design, a designer can create a constraining type, which is a separately maintained definition that specifies requirements. Specifically, the constraining type defines what services, properties, references, and intents are required for each composite, component, or implementation being constrained. A given composite, component, or implementation may have additional capabilities, but those are not visible to a higher-level definition when the constraining type is in effect. For details and an example, see the OSOA document SCA Assembly Model Specification.