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...