…in the beginning I was interested in what is the structure of software.
People in hardware have it all easier. When you build machines, you have obvious components connected by wires and this forces you to a kind of natural modularity. Each component does whatever its doing and provides a simple way interacting with the rest of the world because the connection must be simple. But software has not such a natural constraint…
Barbara Liskov
It’s not rare to join an existing team working on a given project using patterns that are not fit for the requirements. The layered approach on top of a relational or no-sql database and the synchronous communication mechanisms being used can driven teams and architects down to all sort of cross domain coupling that makes systems rigid, prone to failures and difficult to scale.
Following is my list of constraints to structure software components in distributed messaging systems.