Complexity is inherent in any problem. The problem being solved for by a system is likely in of itself complex in some way. This is the inherent complexity of the system. Any more complexity than this is either accidental complexity added by mistake, or some extension to the problem (e.g., do it faster - therefore we have to introduce complexity, or reduce the problem scope in some way). Less complexity than the inherent complexity means we have simplified the problem. Maybe we have ignored some edge cases.

Either way, complexity exists, and it is core to any system.

I would like to focus on two properties of this complexity. Firstly, the Locality of Complexity. As in, where is the complexity? We can often move complexity around, move it to another part of the system, or to another system. But we can rarely remove complexity entirely (that is unless, said complexity is Accidental)

Moving complexity elsewhere in our system can make a lot of sense. Quite often, when we come across a new problem in our domain that we are tackling, we could deal with that problem in a number of ways. Consider not only the tradeoffs, but the locality of complexity when deciding how to tackle this problem. Which part of our system does it make the most sense to put it in? Perhaps there is some good cohesion with other related problems that makes the locality clear. But quite often there are multiple places the complexity can be moved to.

Where this complexity is put can also affect our next parameter. The Magnitude of the Complexity. By putting the complexity in one location it may have better cohesion, but another solution has less magnitude. This is the the piece we might feel when we look at a piece of code.

Systems are fractal, so both of these parameters exist at all sorts of scopes. Locality and Magnitude of complexity when you zoom in and out.

Often we are pushed to go for the simpler solution, but I would argue that cohesion and locality is the more important property to protect than the magnitude. A solution that feels simpler, is often one where the locality is right and all the complexity is in just the right locations and not bleeding anywhere else that it shouldn’t. And if the magnitude really blows out, then consider to tidy first?

In other words, less complexity is not always better than more complexity, depending on the locality of said complexity.