nComplexity is the principal obstacle to the creation of correct, reliable, maintainable software.
nSoftware systems are
inherently complex.
nA good design can
reduce complexity considerably.
nKey: control the
interactions between components.
nComponents should be
self contained; interaction should be
minimal and carefully defined.