Conway's Law: Why Your Software Architecture Mirrors Your Org Chart (And What to Do About It)
Your architecture diagram and your org chart are the same diagram. You just haven't overlaid them yet.
At Salesken, I watched this play out over three years. We had three engineering teams: the real-time team (handling live calls), the analytics team (processing call data), and the platform team (infrastructure and APIs). Guess what our architecture looked like? Three distinct systems with well-defined boundaries between them — and awkward, over-engineered integration layers at every team boundary. The integration layers weren't there because the technology required them. They were there because three teams needed coordination protocols.
When the real-time team and analytics team merged into one team for a quarter to build a new feature, the code they produced had none of those integration layers. Same engineers. Same codebase. Different org structure, different architecture.
That's Conway's Law in action.
What Conway's Law Actually Says
Melvin Conway published the observation in 1967: "Any organization that designs a system will produce a design whose structure is a copy of the organization's communication structure."
Note what it doesn't say. It doesn't say this is good or bad. It doesn't prescribe anything. It's an observation about how human communication constraints shape technical systems. And in my experience across three companies and about 70 engineers, it's one of the most reliably true observations in software engineering.
The mechanism is straightforward. Engineers on the same team communicate frequently — they sit together (or share Slack channels), they pair program, they review each other's code. Engineers on different teams communicate less frequently, through formal channels — meetings, API contracts, specification documents. The code mirrors this: tightly integrated within teams, loosely coupled (or awkwardly coupled) between teams.
Real-World Examples
The three-team trap. At UshaOm, where I led 27 engineers building an e-commerce platform, we had a frontend team, a backend team, and a database team. Our architecture was a classic three-tier monolith — UI layer, business logic layer, data access layer. Not because three-tier was the best architecture for an e-commerce platform. Because we had three teams. When we reorganized around product domains (checkout team, catalog team, seller team), the architecture naturally evolved toward domain services. Each team owned its slice from UI to database. The code followed the org chart, both before and after the reorg.
Amazon's two-pizza teams. Amazon's shift to two-pizza teams (small enough to be fed by two pizzas) is the most cited example of Conway's Law applied strategically. Small, autonomous teams naturally produce small, autonomous services. Their microservices architecture didn't emerge from a grand technical vision — it emerged from an organizational decision about team size and communication boundaries.
The Salesken STT integration. Our speech-to-text integration was owned by one engineer for 18 months. The architecture reflected this: a single module, tightly coupled to the coaching engine, with no clear API boundary. When we needed a second engineer to work on it, the first thing we had to do was refactor it into a proper service with documented interfaces. The code had been optimized for one person's workflow. Adding a second person required adding communication structure to the code.
The Inverse Conway Maneuver
If Conway's Law says your architecture mirrors your org chart, the Inverse Conway Maneuver says: design your org chart to produce the architecture you want.
This sounds obvious once you hear it. In practice, it's rare. Most companies design their org structure around hiring patterns, reporting lines, and political convenience — then wonder why their architecture is a mess.
At Salesken, we used this maneuver deliberately once. We wanted to build a unified data pipeline that would serve both real-time coaching and post-call analytics. Under our existing org structure (separate real-time and analytics teams), this would have produced two pipelines with a translation layer between them. Instead, we created a temporary "data platform" team with engineers from both teams. They built one pipeline. Then we dissolved the temporary team. The unified architecture survived because it was technically sound — it didn't need the org structure to maintain it.
The key insight: organizational structure determines the initial architecture. Good engineering can maintain it afterward even if the org changes. But you won't get the right initial architecture if the org fights against it.
How to Measure Conway's Law in Your Organization
Map your team boundaries onto your architecture. Draw your org chart. Draw your architecture diagram. Overlay them. Where team boundaries align with service boundaries, you're fine. Where they don't — where one team owns parts of multiple services, or multiple teams own parts of one service — you'll find friction.
At Salesken, when we did this exercise, we discovered that our "platform team" owned code in 11 different services. That's not platform engineering — that's organizational sprawl. No wonder changes to shared infrastructure took weeks of coordination.
Track cross-team PRs. How many pull requests require reviewers from multiple teams? A high rate means your code dependencies don't align with your team boundaries. At UshaOm, 35% of our PRs required cross-team review. After reorging around product domains, that dropped to 12%.
Measure cycle time by team boundary. Changes within a single team's code ship faster than changes spanning teams. The delta tells you how much your org structure is costing you. At Salesken, within-team changes had a median cycle time of 2 days. Cross-team changes averaged 8 days. The 4x slowdown was almost entirely coordination overhead.
When Conway's Law Works Against You
Monolith owned by multiple teams. Multiple teams contributing to one codebase without clear module ownership produces a mess. Everyone steps on everyone's toes. Merge conflicts multiply. Code ownership becomes ambiguous. At UshaOm, our Magento monolith was touched by all three teams. Nobody owned the shared utilities directory. It became a dumping ground for code that didn't fit anywhere.
Microservices without team alignment. Breaking a monolith into microservices without aligning services to teams creates the worst of both worlds: operational complexity of microservices plus coordination overhead of cross-team dependencies. I've seen teams create 20 microservices owned by 3 teams. That's not microservices architecture — that's a distributed monolith.
Remote/distributed teams with shared codebases. Conway's Law hits harder when communication is harder. Remote teams sharing code across timezones accumulate more integration debt because the communication overhead is higher. At Salesken, our Bengaluru team and our remote contractors had a measurably higher rate of integration issues on shared code.
Conway's Law and Modern Architecture
Conway's Law intersects directly with microservices and Domain-Driven Design. DDD's bounded contexts map naturally to team boundaries — each bounded context is owned by one team with clear interfaces to other contexts. When your team structure matches your domain model matches your service boundaries, everything flows naturally.
When they don't match, you feel it in every sprint. Features that should be simple require coordinating across team boundaries, service boundaries, and domain boundaries simultaneously. Lead time increases. Deployment frequency decreases. Engineers spend more time coordinating than coding.
The practical advice: before you adopt microservices, make sure your team structure supports it. One team per service, or at most one team owning 2-3 closely related services. If you can't achieve that staffing model, microservices will create more problems than they solve.
What to Do Monday Morning
-
Map it. Overlay your org chart on your architecture. Identify where team boundaries and service boundaries don't align. This takes an afternoon and is immediately illuminating.
-
Measure it. Track cross-team PR rate and cycle time delta between within-team and cross-team changes. If the delta is more than 2x, your org structure is creating significant overhead.
-
Fix the worst misalignment. Don't reorg everything. Find the single worst mismatch between team boundary and code boundary. Fix that one. At Salesken, our worst mismatch was the platform team owning code across 11 services. We assigned clear service ownership and reduced cross-team coordination by 40%.
-
Use it for new systems. When designing new features or services, ask: "Which team will own this? Does the proposed architecture match that team's communication structure?" If not, either change the architecture or change the team structure.
FAQ
What is Conway's Law in simple terms?
Software systems end up structured like the teams that build them. If you have three teams, you'll get a system with three major parts, regardless of whether that's the right technical design.
Is Conway's Law good or bad?
Neither — it's an observation. It can work for you (align teams to produce the architecture you want) or against you (misaligned teams produce awkward architecture). The Inverse Conway Maneuver uses it strategically.
What is Conway's Law in Agile and microservices?
Conway's Law explains why microservices work well with small, autonomous teams and poorly with large, shared-codebase teams. Agile's emphasis on cross-functional teams partially addresses Conway's Law by giving each team full-stack ownership.
Related Reading
- Software Architecture Documentation: The Part That Always Goes Stale
- C4 Architecture Diagram: How to Model Software Systems
- Code Dependencies: The Complete Guide
- Dependency Mapping: How to Know What Will Break Before You Break It
- Platform Engineering: Building for Developer Productivity
- Deployment Frequency: The DORA Metric That Reveals Your True Velocity