In practice, object-oriented design models have been less useful throughout
the lifetime of software systems than they should be. Design models are of
ten large and monolithic, and the structure of the designs is generally qui
te different from that of requirements. As a result, developers tend to dis
card the design, especially as the system evolves, since it is too difficul
t to keep its relationship to requirements and code accurate, especially wh
en both are changing. This paper presents a different approach to designing
systems, based on flexible decomposition and composition, that closely ali
gns designs with both requirements specifications and with code. We illustr
ate how this approach permits the benefits of designs to be maintained thro
ughout a system's lifetime.