Have you ever worked on a software project where you had no idea what would happen to other parts of the system if you made a code change? I have, but I have been able to ask developers on my team that know the system better than I do.
If it’s a larger software project and nobody on the team knows what a change would do, then it would be fair to say the software is overly complex and making forward progress is like wading through a swamp. Software projects, especially larger software projects absolutely must have code that is understandable. When designing software applications, a key component to the architecture is managing complexity to a workable level.
Managing complexity is the most important technical topic in software development. In my view, it’s so important that Software’s Primary Technical Imperative has to be managing complexity.
- Steve McConnell in Code Complete
Unless its a small project, no software developer can contain the design, constraints, and all the technical details in their head at the same time. Software must be made modular so that a developer can work on one section of code without worrying about the rest of the project.
How do you deal with complexity?
- Break up the problem into sub-problems and sub-tasks so you don’t have to solve everything at the same time.
- Contain the complexity to one part of the code.
- Before you solve the complex issue take a step back and make sure you have to solve it that way. There might be a vastly simpler problem that you can solve that will still fulfill your requirements.
Tackle software complexity before it defeats your software project.