Conway’s law

Conway's law is an observation made by computer programmer Melvin Conway in 1968. It 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 structure of a software system will reflect the structure of the organization that created it.

There are a few different interpretations of Conway's law. One is that the structure of a software system will be a reflection of the structure of the organization that created it. Another interpretation is that the structure of a software system will be a reflection of the structure of the organization's communication.

There is some evidence to support Conway's law. For example, a study of 1,000 software projects found that the number of lines of code in a project was correlated with the number of developers on the project.

Conway's law is often cited as a reason why it is important to have a clear and well-defined organizational structure. It can also be used to explain why some software projects are more successful than others.

How do you break Conway's Law?

There are a few ways to break Conway's Law:

1. Change the way your team is organized.

If you want to break Conway's Law, you need to change the way your team is organized. Instead of having teams that are organized by function, have teams that are organized by product. This will allow for more communication and collaboration between teams, and will ultimately lead to better software.

2. Change the way you communicate.

If you want to break Conway's Law, you need to change the way you communicate. Instead of having siloed communication between teams, have communication that is open and transparent. This will allow for more collaboration and will ultimately lead to better software.

3. Change the way you think about software.

If you want to break Conway's Law, you need to change the way you think about software. Instead of thinking of software as a product that is created by a team, think of it as a product that is created by a community. This will allow for more collaboration and will ultimately lead to better software.

What is inverse Conway's Law?

Inverse Conway's Law states that the structure of a software system reflects the structure of the organization that created it. In other words, the more centralized and hierarchical an organization is, the more likely it is to produce monolithic and inflexible software. Conversely, the more decentralized and flat an organization is, the more likely it is to produce modular and reusable software.

The term "inverse Conway's Law" was coined by software engineer Paul Fenwick in a blog post about the relationship between organizational structure and software design. Fenwick's post was inspired by a talk given by software developer John Ousterhout, in which Ousterhout argued that the structure of a software system is a reflection of the organization that created it.

Fenwick's post sparked a lively debate on the relationship between organizational structure and software design. Some commenters argued that the inverse of Conway's Law is not a law at all, but merely an observation about the way things tend to work in practice. Others argued that the inverse of Conway's Law is actually a more general version of Conway's Law, which applies to all systems, not just software systems.

Regardless of whether or not it is a "law," inverse Conway's Law is a useful way of thinking about the relationship between organizational structure and software design. It can help software developers and architects to understand the trade-offs involved in different organizational structures, and to make decisions about which structure is best suited to their needs Is an adage stating that organizations design systems that mirror their own communication structure? Yes, organizations often design systems that mirror their own communication structure. For example, if an organization has a hierarchical structure, with a clear chain of command, they may design a system with a hierarchical structure and clear chain of command. This can help to ensure that communication between different parts of the organization is clear and efficient.