To find the right level of component granularity, software architects have to continuously iterate their component designs with developers. Architects need to take into account user requirements, responsibilities and architectural characteristics.[3]
Considerations
An example of two components in UML: Checkout processes a customer's order, which requires the other one to bill the credit card.
For large-scale systems developed by large teams, a disciplined culture and process is required to achieve the benefits of CBSE.[4]Third-party components are often utilized in large systems.
The system can be designed visually with the Unified Modeling Language (UML). Each component is shown as a rectangle, and an interface is shown as a lollipop to indicate a provided interface and as a socket to indicate consumption of an interface.
^George T. Heineman, William T. Councill (2001). Component-Based Software Engineering: Putting the Pieces Together. Addison-Wesley Professional, Reading 2001 ISBN0-201-70485-4