Minimizing complexity
Building software is inherently complex and a number of problems result from complexity. Higher levels of complexity in software:
- Cause delays in schedules
- Lead to cost overruns
- May cause the software to behave in unintended ways or lead to an unanticipated application state
- May create security loopholes or prevent security issues from being discovered in a timely fashion
- Are a predictive measure of lower levels of some quality attributes, such as lower maintainability, extendibility, and reusability
In The Mythical Man-Month, Fred Brooks divides the problems facing software engineering into two categories, essential and accidental:
"All software construction involves essential tasks, the fashioning of the complex conceptual structures that compose the abstract software entity, and accidental tasks, the representation of these abstract entities in programming languages and the mapping of these onto machine languages within space and speed constraints."
Accidental difficulties...