Software development is about solving problems. One of the greatest challenges of problem solving is dealing with complexity. And dealing with complexity is itself a complex task.
So what is complexity? A simplistic and practical definition is that complexity is measured by the number of things that we need to keep in mind simultaneously to be able to comprehend a subject or solve a problem. Researchers tell us that the average human can keep from four to seven things in short-term memory at the same time, so any problem that requires keeping track of more than four things is complex.
In software development the struggle with complexity is the main driver for the development of high-level programming languages, powerful IDEs, programming paradigms, best practices, design patterns, etc.
Some of the major sources of complexity in software development are:
- The problem solved by the software product may be complex itself.
- The knowledge about the problem may be insufficient, either because of unclear requirements, or because of poor understanding of the problem.
- The product may just be too big.
- Previous knowledge, experience and preconceptions may introduce additional complexity when dealing with concepts that conflict with them.