Oh My Learning

Conway's Law and Team Organization

building-microservices/17 staff drafted · 13 min read

Building Microservices, 2nd ed. (Sam Newman), Chapter 15

Prerequisites building-microservices/01 building-microservices/02 building-microservices/03

Conway's Law and Team Organization#

TL;DR#

Conway's Law observes that a system's architecture inevitably mirrors the communication structure of the organization that built it — you cannot design a clean, loosely-coupled architecture on top of a tightly-coupled, cross-dependent team structure and expect the architecture to stick. The inverse Conway maneuver flips this into a deliberate strategy: reshape your teams first, around the architecture you want, and let the architecture follow. Team Topologies-style thinking — stream-aligned teams owning services end-to-end, supported by platform and enabling teams — is the practical organizational pattern most compatible with a healthy microservices architecture.

The idea#

Every other lesson in this subject has treated service boundaries as a technical design problem: find the bounded contexts (Lesson 02), minimize coupling (Lesson 03), split the monolith carefully (Lesson 04). This lesson makes an argument that reframes all of that: the organization is not a neutral implementer of whatever architecture you design — the organization's own structure actively shapes, and often overrides, the architecture, whether you intend it to or not.

This is Conway's Law, from Melvin Conway's 1968 paper: "Organizations which design systems... are constrained to produce designs which are copies of the communication structures of these organizations." The mechanism behind it is not mysterious: software gets built by people talking to each other (or, just as tellingly, not talking to each other) to coordinate a design. If two pieces of a system are built by two teams that communicate easily, frequently, and informally, the interface between those pieces tends to stay loose, and details leak across it easily, because coordination is cheap. If two pieces are built by teams in different divisions, different timezones, or with a slow, formal handoff process between them, the interface between those pieces tends to stay much more rigid and explicit, because coordination is expensive and every interaction has to be deliberate — the organizational distance between the teams becomes architectural distance between the components, whether anyone planned it that way or not.

Worked example of the law itself. Suppose you draw a beautiful, well-modeled architecture diagram (following Lesson 02's DDD approach) with four cleanly bounded services: catalog-service, ordering-service, payment-service, shipping-service. But your actual engineering organization has one team of twelve engineers who own "everything backend," with no sub-team boundaries at all, and this one team is under constant pressure to ship features fast across all four "services." What happens in practice: because there's no organizational boundary reinforcing the architectural one, engineers on that single team will, under time pressure, take the path of least resistance — a quick cross-service database query here, a tightly coupled synchronous call chain there, a shared library that starts absorbing business logic that should live in one service — because nothing in the organization is pushing back on that shortcut the way a genuine team boundary (with its own on-call, its own roadmap, its own explicit interface contract to negotiate) would. Within a few months, the four "services" on the diagram are, in practice, a distributed monolith: nominally four deployables, but coupled together (Lesson 03) almost as tightly as if they were one, because the team structure never actually separated the work.

How it works#

Conway's Law is a description, not a suggestion — but you can use it deliberately#

The law describes what tends to happen by default, as an emergent, often unintentional consequence of how teams are structured. The inverse Conway maneuver is the deliberate, strategic move of treating this causal relationship in the other direction on purpose: instead of designing the architecture and hoping the (unchanged) organization will somehow implement it faithfully, you first restructure the teams to mirror the target architecture, and let the software structure follow the new team structure naturally, because Conway's Law will pull it there anyway.

Concretely: if the target architecture is catalog-service, ordering-service, payment-service, shipping-service as genuinely independent, loosely-coupled services, the inverse Conway move is to split the single twelve-person backend team into four smaller teams, each owning exactly one of those services end-to-end — its code, its data, its deployment pipeline (Lesson 09), its on-call. Once that organizational boundary exists, Conway's Law starts working for the architecture instead of against it: the ordering-service team and the payment-service team no longer share a Slack channel and a daily standup where cutting a corner is a two-second conversation — they have to negotiate an explicit interface (an API contract, Lesson 12's consumer-driven contracts) to change how they interact, and that friction is exactly what keeps the boundary honest over time, the same way a well-designed physical wall keeps a building's rooms distinct even when nobody's actively enforcing it room by room.

Second-order and cross-team effects: why this is a staff-level decision#

This is precisely why this concept anchors at the staff seniority band, not senior: getting a single service's internal boundaries right (Lesson 02, Lesson 03) is a senior-level, largely technical judgment call, exercised within one team's scope. Deciding to reorganize teams — moving people, redrawing reporting lines, changing who's on whose roadmap and whose on-call rotation — has consequences that ripple far beyond any one service's code: hiring plans, career paths, cross-team dependencies on shared platform capabilities, and the organization's overall ability to coordinate large, cross-cutting initiatives that don't map neatly onto any single team's ownership. A staff engineer (or a group of staff engineers and engineering leadership together) is typically the one positioned to see and reason about these org-wide, second-order effects — a change that looks purely beneficial from inside one team's perspective (say, "give the ordering team full autonomy") can create new coordination costs elsewhere (e.g., a company-wide compliance initiative that now has to separately negotiate with four autonomous teams instead of coordinating with one centralized backend group).

Team Topologies: the practical organizational pattern#

The book Team Topologies (Skelton and Pais, 2019) — a natural companion to Newman's argument, and one Newman references approvingly — gives a concrete vocabulary for organizing teams in a way compatible with a healthy microservices architecture, built around four team types:

  • Stream-aligned teams — the default team type: owns a cohesive slice of business capability end-to-end (aligned with a bounded context, Lesson 02), from code through deployment (Lesson 09) to production operation and on-call. This is the team shape that naturally produces independently deployable, well-bounded services, because the team's own boundaries mirror the service boundaries you want.
  • Platform teams — build and operate shared infrastructure (CI/CD tooling, the deployment/orchestration platform from Lesson 10, observability infrastructure from Lesson 13) as an internal product that stream-aligned teams consume self-service, reducing the amount of low-level infrastructure work every stream-aligned team would otherwise have to duplicate.
  • Enabling teams — provide specialized expertise (e.g., security, Lesson 16; performance) to stream-aligned teams temporarily, helping them build a capability internally, then stepping back — rather than becoming a permanent bottleneck every team must route through for that expertise.
  • Complicated-subsystem teams — a narrower team owning a piece of genuinely deep technical complexity (e.g., a specialized pricing/rating engine) that doesn't cleanly fit inside any one stream-aligned team's remit and would be inefficient to duplicate expertise for across several teams.

The key structural claim, directly following from Conway's Law: stream-aligned teams should be able to design, build, test, deploy, and operate their own services with minimal cross-team hand-offs — every hand-off (waiting on another team to review, approve, or deploy something on your behalf) is exactly the kind of organizational friction that Conway's Law will, over time, encode as unwanted coupling in the architecture, echoing back into the software as slower, more coordinated releases, undermining Lesson 01's whole promise of independent deployability.

Worked example: applying the inverse Conway maneuver#

A company currently has one centralized "Platform Engineering" team of twenty engineers responsible for the entire backend of an e-commerce system — a single, large, tightly-coupled codebase, effectively a distributed monolith despite being split into a dozen "services" on paper, exactly as in the earlier worked example. Leadership wants genuine microservices architecture, with independent deployability actually realized.

Wrong approach (architecture-first, org unchanged): Draw a target architecture with clean bounded contexts, hand it to the same twenty-person team as "the new design to follow," and expect the coupling to disappear because a diagram says so. Six months later, the same coordination bottlenecks persist, because the daily reality of twenty people sharing one backlog, one on-call rotation, and one set of Slack channels still makes cutting corners across "service" boundaries the path of least resistance — Conway's Law reasserts itself over the diagram.

Inverse Conway approach: Before finalizing the target service boundaries in detail, restructure the twenty engineers into four or five stream-aligned teams (Catalog, Ordering, Payments, Fulfillment), each given real end-to-end ownership — their own roadmap, their own on-call, their own deployment pipeline (Lesson 09) — plus a platform team providing shared CI/CD and observability tooling (Lessons 09, 13) so each stream-aligned team doesn't have to rebuild that infrastructure independently. As each team now has to actually negotiate an explicit interface with its neighbors (rather than casually reaching across an internal boundary), the architecture starts converging toward the intended bounded contexts because the organization now reinforces those boundaries daily, not because a diagram asked it to.

The two-year view: evolution, not a one-time fix#

A staff-level treatment of this topic has to reckon with time: team structures that fit today's architecture and today's business priorities won't fit forever. As the business evolves — a new product line, a shift in strategic focus, a team that outgrows its original scope — the "right" bounded contexts (Lesson 02) shift too, and a team structure frozen in place becomes a drag on further architectural evolution, via the same Conway's Law mechanism now working in reverse: the org structure that once helped establish good boundaries can, if left static, actively resist a needed re-decomposition later, because changing the software boundaries now also requires the more painful, slower work of changing team boundaries (headcount, management structure, career paths) to match. Newman's guidance, and Team Topologies' explicit stance, is that team boundaries should be treated as a living design decision to revisit periodically, not a one-time reorg — the same evolutionary, incremental mindset urged for the architecture itself in Lesson 04 applies to the organization that builds it.

Pros#

  • Working with Conway's Law rather than against it produces architecture that actually stays loosely coupled over time, because organizational friction reinforces the intended boundaries daily, not just at design time.
  • Stream-aligned teams with genuine end-to-end ownership directly enable the independent deployability that's the whole point of microservices (Lesson 01) — less waiting on other teams, less hand-off friction.
  • Platform and enabling teams let stream-aligned teams stay focused on their business domain without each having to independently rebuild deep infrastructure or specialized expertise.

Cons#

  • Reorganizing teams is expensive and disruptive — it touches management structure, career paths, and people's day-to-day working relationships, not just an architecture diagram; doing it carelessly can cause real morale and retention damage.
  • Team boundaries drawn around today's bounded contexts can ossify — as the business and the right architecture evolve, a static org structure becomes a source of resistance to further change (the reverse-Conway drag described above), so this has to be revisited periodically, not decided once.
  • Platform and enabling teams, done poorly, can become bottlenecks themselves — an under-resourced platform team that every stream-aligned team depends on can recreate exactly the coordination bottleneck the whole reorganization was meant to eliminate, just at a different layer.

Alternatives#

  • Leave team structure as-is and rely purely on technical/process discipline (code review, architecture review boards, documented standards) to prevent unwanted coupling despite an organizational structure working against it — occasionally sustainable for a while with a highly disciplined team, but Newman and Conway's Law both suggest this is fighting an uphill, ultimately losing battle against organizational gravity, especially under sustained delivery pressure.
  • Component teams instead of stream-aligned teams (a team per technical layer or per shared component, e.g., a "database team," a "frontend team") — the team-structure analog of the technical-layering anti-pattern from Lesson 02; tends to produce exactly the same cross-cutting coordination pain for any single feature that touches several layers, now expressed as inter-team hand-offs instead of inter-service coupling.

When to use it#

  • Any time you're planning a genuine microservices decomposition (Lesson 04) at meaningful scale — team structure should be part of that plan from the start, not an afterthought bolted on once the "real" (technical) architecture work is done.
  • When an existing microservices architecture keeps drifting back toward tight coupling despite good technical intentions — this is often a signal that the team structure, not the technical design, is the actual root cause, and worth diagnosing through a Conway's Law lens.

When NOT to use it#

  • A small organization (a handful of engineers) doesn't need formal stream-aligned/platform/enabling team distinctions — that structure is overhead that doesn't pay for itself until the organization is large enough that cross-team coordination is a real, recurring cost worth designing around.
  • Don't reorganize teams reactively, on a whim, every time the architecture shifts slightly — team restructuring has real human and organizational cost (see Cons above), so it should be a deliberate, periodically-revisited decision, not a constant churn.

Key takeaways / mental model#

Software architecture is not designed in a vacuum — it is grown inside, and shaped by, the communication structure of the organization that builds it, whether anyone intends that or not. You can fight this (and generally lose, over time, under delivery pressure) or use it deliberately: restructure teams first, around the boundaries you actually want (the inverse Conway maneuver), and let daily organizational friction reinforce those boundaries the way careful code review alone cannot. Stream-aligned teams with genuine end-to-end ownership, supported by platform and enabling teams rather than blocked by them, is the practical shape that keeps a microservices architecture's boundaries honest — and revisit that team shape periodically as the business and the right architecture evolve, rather than treating either as fixed forever.

Self-check questions#

  1. State Conway's Law in your own words, and explain the underlying mechanism (why does organizational communication structure end up shaping software architecture)?
  2. What is the inverse Conway maneuver, and how does it differ from simply designing a good architecture and asking the existing organization to implement it faithfully?
  3. Why is this concept tagged staff rather than senior — what makes the decision to restructure teams a different kind of judgment call than deciding a single service's internal boundaries?
  4. A company reorganizes into perfect stream-aligned teams matching their target architecture, and two years later the business has pivoted significantly, but the team structure hasn't changed. What risk does this lesson predict, and why?
  5. Give an example of how an under-resourced platform team could recreate the very coordination bottleneck that adopting stream-aligned teams was meant to solve.

References#

  • Building Microservices, 2nd ed. (Sam Newman, O'Reilly 2021), Chapter 15: "Organizational Structures" (Conway's Law and team-topology discussion)
  • Melvin E. Conway, "How Do Committees Invent?" (Datamation, 1968) — the original statement of Conway's Law.
  • Matthew Skelton and Manuel Pais, Team Topologies: Organizing Business and Technology Teams for Fast Flow (IT Revolution Press, 2019) — the stream-aligned/platform/enabling/complicated-subsystem team vocabulary used in this lesson.