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:


The next step is to define when complexity becomes over-complexity.