Skip to main content

Command Palette

Search for a command to run...

How Conway's Law Shapes Your Software Architecture

Updated
5 min readView as Markdown
How Conway's Law Shapes Your Software Architecture

Conway's Law states that an application's architecture and user interface will inevitably mimic the communication structures of the organization that built it. If your teams work in silos with high communication barriers, your software will feel fragmented, resulting in disjointed user experiences and inconsistent codebases.

I frequently notice a jarring pattern when using everyday apps, like mobile banking tools. I'll open an app to check my account balance, and everything looks clean, modern, and intuitive. But the moment I tap "Add Payment," I feel like I've been transported to a screen built by an entirely different company. The buttons have different border radiuses, the input validation behaves differently, and the confirmation flow uses a completely foreign UX pattern.

I don't see this as a simple design oversight. I see it as a textbook manifestation of Conway's Law.

What is Conway’s Law in software development?

Conway's Law is the observation that organizations design systems that copy their own communication structures. In software, this means that the boundaries between your engineering teams inevitably show up as seams in your production code and user interface.

I find that developers like to think they are making purely rational, technical decisions. I want to believe I choose microservices, design patterns, and UI frameworks based solely on architectural merit. But the reality is that the social dynamics of an organization dictate its technical output.

If I see two teams that rarely speak to one another, I can almost guarantee their respective codebases will struggle to integrate. Within a single team, communication is fast and high-bandwidth. Developers share Slack channels, pair program, and align on standards daily. Because of this, the features built by a single team—like that self-consistent "Check Balance" screen—feel cohesive. The friction only appears when those team boundaries meet.

Why does Conway's Law cause inconsistent user experiences?

In my experience, inconsistent user experiences occur because the communication friction across team boundaries forces developers to make isolated design decisions. When collaboration requires multiple layers of indirection, teams naturally optimize for their local scope rather than the global application.

I like to think of this as a transaction cost problem. Imagine a team is building a fintech app. The "Check Balance" team and the "Add Payment" team are completely separated. To coordinate a simple styling update, a developer on Team A can't just message Team B; they have to escalate it to their product manager, who schedules a meeting with Team B's product manager, who eventually adds it to a backlog.

Because the communication cost is so high, teams choose the path of least resistance: they build inside their own silo. The result is two beautiful, highly functional screens that look like they belong to different apps when placed side-by-side.

Team Communication Pattern Technical & UI Manifestation Impact on the User
Siloed Teams (Proxy communication via managers) Duplicated CSS, disjointed UI components, divergent API designs. High cognitive load, confusing navigation, inconsistent flows.
Cross-Functional Alignment (Direct engineer collaboration) Shared component libraries, unified API gateways, consistent design tokens. Seamless transitions, predictable behavior, intuitive user experience.

How do you prevent Conway's Law from breaking your software?

I've found the most effective way to counteract Conway’s Law is to use the "Inverse Conway Maneuver," which means structuring your teams to match your target technical architecture. Establishing shared tooling, like a robust design system, also significantly reduces the communication overhead required to maintain consistency.

If I'm aiming for a unified user experience, I know I can't allow engineering teams to operate as isolated islands. I need to actively design the organization to support the software I want to build.

One practical approach I always recommend is decoupling UI components from individual feature teams. By establishing a dedicated design systems team or a cross-team UI guild, you create a shared technical language. Developers from different teams no longer need to negotiate button styles or input behaviors; they pull from the same single source of truth.

Another approach is structural. If an application requires a seamless transition between checking a balance and adding a payment, I would argue those features shouldn't be split across hard organizational boundaries. Reorganizing teams around user journeys rather than isolated technical modules forces natural, daily communication where it matters most.

FAQ

What is the Inverse Conway Maneuver?

The Inverse Conway Maneuver is the practice of shaping an organization's team structure to promote a desired software architecture. Instead of letting your current organizational silos dictate your code, you actively redesign your teams to mirror the ideal, cohesive system design you want to achieve.

Can a design system completely solve Conway's Law?

I believe a design system is an excellent tool to mitigate visual inconsistencies, but it cannot solve Conway's Law alone. While it ensures buttons and inputs look identical, structural architectural issues—like lagging APIs or fragmented user flows—will still occur if the underlying teams remain siloed.

How does Conway's Law impact microservices?

Conway’s Law heavily influences microservices by tying service boundaries directly to team boundaries. If you have four separate engineering teams, you will naturally end up with four primary microservices; if those teams struggle to communicate, the integrations between those microservices will inevitably be brittle and prone to failure.