Managing Complexity

Primary Imperative in Software Development

Managing complexity is the most important technical topic and known as the primary imperative in software development.

Two approaches

  1. Minimize complexity derived from the problem.
  2. Limit the complexity that comes from optional/ incidental choices.

Desirable Characteristics

Minimal Complexity

Ease of Maintenance

Loose coupling/High cohesion

Coupling: A measure of interconnectivity and dependence between different modules within a code base.

Cohesion: A metric used to describe how focused a module is performing a particular task.

Extensability, Reusability

##High fan-in

High fan-in: having a high number of classes that use a given class.

Low-to-medium fan-out

Low-to-medium fan-out: having a given class use a low-to-medium number of other classes.

Portability

Stratification

Standardize techniques