Design Heuristics

1. Evaluate the preliminary software structure to reduce coupling and improve cohesion, by implosion (combining modules) and explosion (splitting modules).

2. Attempt to minimize high fan-out. Strive for high fan-in (shared modules) as depth increases.

3. Keep the scope of effect of a module within the scope of control of that module.

4. Evaluate module interfaces to reduce complexity and redundancy and improve consistency.

5. Strive for single entry single exit modules. Avoid problematical (or pathological) connections.