Complexity
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.