Understanding Conway's law

Conway's law is defined as follows:

"Organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations."

This means the structure of the system will reflect the structure of the team building it. A famous variation by Eric Raymond is this:

"If you have four groups building a compiler you'll get a 4-pass compiler."

This is very insightful and I've personally witnessed it time and again in many different organizations. This is very relevant to microservice-based systems. With lots of small microservices, you don't need a dedicated team for each microservice. There will be some higher-level groups of microservices that work together to produce some aspect of the system. Now, the question is how to think about the high-level structure. There are three main options:

  • Vertical
  • Horizontal
  • Matrix

Microservices can be very important in this regard. By being small autonomous components, they support all structures. But, what is even more important is when organizations need to transition from one approach to another. The usual trajectory is: horizontal | vertical | matrix.

The organization can perform those transitions with much less friction if the software follows a microservice-based architecture. It can even be a deciding factor. Even an organization that doesn't follow microservice-based architecture decides to stay with an inappropriate structure because the risk and effort of breaking the monolith is too high.