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 →