|  
 
    Typically, one person or a small team is responsible for a set of design elements, usually one or more packages or
    subsystems containing other design elements. This person/team is responsible for fleshing out the design details for
    the elements contained in the package or subsystem: completing all operation definitions and the definition of
    relationships to other design elements. The Task: Capsule Design focuses on the recursive decomposition of
    functionality in the system in terms of capsules and (passive or data) classes. The Task: Class Design focuses on refining the design of
    passive class design elements, while the Task: Subsystem Design focuses on the allocation of behavior
    mapped to the subsystem itself to contained design elements (either contained capsules and classes or
    subsystems).  Typically subsystems are used primarily as large-grained model organization structures, while
    capsules being used for the bulk of the work and "ordinary" classes being relegated largely to passive stores of
    information.
 
    The individuals or teams responsible for designing capsules should be knowledgeable in the implementation language as
    well as possessing expertise in the concurrency issues in general. Individuals responsible for designing passive
    classes should also be knowledgeable in the implementation language as well as in algorithms or technologies to be
    employed by the class. Individuals or teams responsible for subsystems should be more generalists, able to make
    decisions on the proper partitioning of functionality between design elements, and able to understand the inherent
    trade-offs involved in various design alternatives.
 
    While the individual design elements are refined, the use-case realizations must be refined to reflect the evolving
    responsibilities of the design elements. Typically, one person or a small team is responsible for refining one or more
    related use-case realizations. As design elements are added or refined, the use-case realizations need to be
    reconsidered and evolved as they become outdated, or as improvements in the design model allow for simplifications in
    the use-case realizations. The individuals or teams responsible for use-case realizations need to have broader
    understanding of the behavior required by the use cases and of the trade-offs of different approaches to allocating
    this behavior amongst design elements. In addition, since they are responsible for selecting the elements that will
    perform the use cases, they need to have a deep understanding of external (public) behaviors of the design elements
    themselves.
  |