What is software complexity?
As a fellow grug brained developer, I also agree that complexity is very bad. But what is software complexity? What does it look like? How does it come about?
The article above tells you what to do to avoid it, but doesn’t quite tell you what it looks like.
In John Ousterhout’s Philosophy of Software Design, he describes a few common symptoms of complexity, and what to do about it.
Complexity is anything related to the structure of a software system that makes it hard to understand and modify the system.
The common symptoms are:
- change amplification: a seemingly simple change requires code modifications in many different places
- cognitive load: refers to how much a developer needs to know in order to complete a task. sometimes an approach that requires more lines of code is simpler if it reduces cognitive load
- unknown unknowns: when it is not obvious which pieces of code must be modified to complete a task, or what information a developer must have to carry out the task successfully
Also, complexity doesn’t come about abruptly. There’s usually no single cause you can point to. You don’t notice it accumulating until it’s too late.
I think J.O. is also realistic in that he recognizes there is a tradeoff between software design vs overengineering. Too much design leads to overengineering useless pieces, and may even cause more complexity. But some software design is useful to avoid complexity, and will likely lead to software that is easier to modify.
Have some thoughts on this post? Reply with an email.