Layer Complexity
- 1 minIn our everyday work, we try to design our systems in a way that a change can be easily accommodated. To do so, we often go to great lengths in order to minimize coupling between components and keep each component as small and focused as possible. Sometimes we succeed, other times we don’t. Sometimes the complexity of a component is such that a simple approach is not an option, at least not in the beginning.
What is the price though for such devotion towards better design? I would argue it’s complexity. Complexity of a different kind.
The complexity I’m referring to here is not one you would find in a very long method or a very long class. The complexity I’m referring to is the one you get from pursuing modularity. By adding layers of abstraction, we aim to improve the design of the system. That also adds more layers and more indirection that we need to mentally manage. We now have to draw the lines between components and constantly be aware of them.
Sometimes this is worth it, sometimes maybe not.
Design and the understanding of tradeoffs is always an ongoing learning process…