Interfaces and dependencies between implementation subsystems
have been defined.
The workload for the Implementation Team is balanced;
potential bottlenecks have been identified and work has been
redistributed, and contingency plans have been created to allow critical
work to be redistributed if the initial work allocation becomes
imbalanced.
There are no instances of dependencies crossing more than one
layer boundary.
Unnecessary dependencies on lower-layer subsystems have been
eliminated.
The impact of necessary dependencies on lower layer subsystems
has been reduced by letting subsystems in middle layers re-export interfaces
from subsystems in lower layers.
The number of layers is no more than seven (plus or minus
two), or there is a well-understood reason why more layers exist.
The ratio between the number of packages or subsystems and
the number of implementation elements is consistent with the application
size and complexity (for example, 5 packages or subsystems and 1,000 files
is a sign that something is wrong).
The amount of source code is consistent with the expectation
based on the number of design classes (for example, 100,000 lines of code
for 10 design classes is a sign that the either the design or the
implementation, or both, may be flawed).
The actual implementation effort is close to what was
estimated, or if not, the basis for estimation has been examined and
adjusted.