Microservices and Conway’s law. Conway’s Law is a principle in software… | by Devsena Mishra | Medium
Conway’s Law is a principle in software engineering that states that:
“organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations.”
In other words, the design of a system will reflect the communication structure of the organization that created it.
Wikipedia says that:
“The law is based on the reasoning that in order for a product to function, the authors and designers of its component parts must communicate with each other in order to ensure compatibility between the components. Therefore, the technical structure of a system will reflect the social boundaries of the organizations that produced it, across which communication is more difficult.”
Instead of law, it sounds more like an observation of Conway as if he saw that the architectures of software systems look remarkably similar to the organization of the development team that built it.
Eric S. Raymond, an open-source advocate, restated Conway’s law in The New Hacker’s Dictionary, where he wrote that the law means:
If you have four groups or teams working on a compiler, you’ll get a 4-pass compiler- so the organization of the software and the organization of the software team will be congruent (means identical or similar in shape/size), he said.
But in more simple terms, we can say that Conway’s law or idea was that — if a designer can communicate easily with the author of the code then he will have a rich understanding of the code. This makes it easier for their code to interact, not just in terms of function calls, but also in terms of their shared assumptions and way of approaching to the problem domain.
So, in a way, social interactions or boundaries and mutual understanding within teams, influence and reflect in the design of the Systems too.
But the key point here is that the modular decomposition of a system and the decomposition of the development organization must be done together or we can say that the architecture and teams which build them must evolve together and it’s an ongoing process too.
Now the question comes- how it is related to Microservices?
For that, you can watch my video - https://www.youtube.com/watch?v=DApJhro4uYU&t=51s