**The granule of reuse is the granule of release. Only components that are released through a tracking system can be effectively reused. This granule is the package **
The components in a package are reused together. If you reuse one of the components in a package, you reuse them all.
The components in a package should be closed together against the same kind of changes. A change that affects a package affects all components in that package
The dependency structure between packages must be a directed acyclic graph (DAG). That is there must be no cycles in the dependency structure.
The dependencies between packages in a design should be in the direction of the stability of the packages. A package should only depend upon packages that are more stable that it is.
Packages that are maximally stable should be maximally abstract. Unstable packages should be concrete. The abstraction of a package should be in proportion to its stability.