Complexity can hide inside structure
Adding folders, interfaces, services, and abstractions can make a codebase look architectural without making it easier to change. Structure only helps when it creates useful boundaries around responsibilities.
I use architecture to answer a simple question: when one part of the product changes, how much unrelated software has to change with it?
Start with responsibility and ownership
A strong boundary usually has a coherent reason to change, an explicit contract, and a clear owner. That can exist inside a modular monolith or across separate services. Deployment topology is a consequence, not the definition, of good modularity.
Choose the smallest structure that protects change
The right architecture is often the simplest one that protects important boundaries. If a module can remain inside one deployable unit without causing operational or organizational pain, there may be no value in splitting it into a networked service yet.
Have a system where this tradeoff matters?
Start a conversation →