The first step to measuring excessive complexity is to measure the complexity at every level of design breakout. For Java, this means every method, class, package and high-level package is measured by the items and dependencies it immediately contains.
For example, the complexity of a package is a function of the classes it contains, and the relationships between those classes.
Excess complexity is measured in terms of 2 metrics:
- Fat is a measure of the compositional (breakout) complexity at every level.
- Design Tangles are cyclic dependencies between packages, measured at the breakout of high-level packages ( "design level").
The next step is to define when complexity becomes over-complexity.