n Complexity is the principal obstacle to the
creation of correct, reliable, maintainable
software.
n Software systems are inherently complex.
n A good design can reduce complexity
considerably.
n Key: control the interactions between
components.
n Components should be self contained;
interaction should be minimal and carefully
defined.