← All posts
·7 min read

The Inverse Conway Maneuver: Design the Teams You Want the Architecture to Have

Inverse Conway ManeuverOrg DesignAI Architecture

Melvin Conway's 1968 observation was descriptive, not prescriptive: "organizations which design systems are constrained to produce designs which are copies of the communication structures of these organizations." He wasn't telling anyone to do anything. He was noticing that they already do it, unconsciously, every time. Three teams that talk to each other in an unstructured, everybody-reaches-into-everything way will produce a system with the same shape — three components with no clean boundary between them, because the code just followed the conversations. The inverse maneuver, a term popularized by the Team Topologies authors among others, flips this from an observation into a lever: decide the architecture you actually want first, then deliberately shape the teams to match it, and let Conway's Law do the enforcing for you instead of doing it to you.

Default versus deliberate

Conway’s Law (default)org chart happens to the architectureInverse Conway Maneuverarchitecture is chosen, teams are shaped to matchTeam ATeam BTeam CBillingSearchNotifications3 teams, each reaching into 2+ modules→ tangled dependencies, slow releasesTeam ATeam BTeam CBillingSearchNotificationseach team owns exactly one module→ clean seams, independent releases

The left side is what happens when nobody decides anything on purpose: three teams, none of them owning a clean boundary, all of them reaching into whatever module happens to need a change this sprint. Nobody chose this shape. It emerged from the path of least resistance, one Slack thread and one "can you just also touch this file" at a time — and six months later it's the reason every release needs three teams' sign-off. The right side is the same three teams and the same three modules, but the boundary was drawn first and the teams were formed around it, so each team's Slack habits, code ownership, and release cadence naturally stay inside their own lane, because there's no other module they need to reach into.

Why you have to do this before the architecture exists, not after

The maneuver only works as a leading indicator, not a trailing one. If you wait until the tangled version already exists and then try to redraw team boundaries on top of it, you're fighting the code — the modules are already coupled, the shared database tables already exist, the implicit contracts between "teams" are already load-bearing. Restructuring the org chart at that point doesn't fix the architecture; it just relabels who's confused about the same tangled system. The maneuver has to run in the other direction: decide the target architecture's seams first — which is exactly the exercise Team Topologies walks through, stream-aligned teams around genuine value flows, platform teams around genuine shared infrastructure — and then build or reorganize the teams to sit on those seams before too much code exists to make moving them expensive.

This is also why the maneuver pairs so naturally with the Strangler Fig pattern. If you're incrementally extracting capabilities from a legacy system, each extraction is a moment where you're not just choosing a service boundary, you're choosing a team boundary too — and getting that pairing right the first time is much cheaper than migrating the code correctly and then discovering the team structure still doesn't match it.

Where this bites specifically in AI platforms

AI teams are unusually prone to the default, ungoverned version of Conway's Law, because the early phase of any AI initiative genuinely does need everyone touching everything — a small group figuring out prompting, retrieval, and evals together, with no clean boundaries yet, because nobody knows where the boundaries should be. That's fine as a temporary state. It becomes a problem when it's never revisited: the "everyone touches everything" team stays that shape long after the system has grown into three or four genuinely separable concerns — retrieval infrastructure, prompt/agent logic, evaluation and guardrails — and the architecture stays tangled because the team never got deliberately split to match the boundaries it should have.

The fix is to treat the team-boundary decision as its own explicit architecture review, not an HR afterthought. When a system's scope grows past what one team can hold in their heads, ask the Inverse Conway question directly: what are the target module boundaries here, and does our current team shape produce that architecture or fight it? If the honest answer is "fight it," the reorg isn't a distraction from the technical work — it's the highest-leverage technical decision available, because every future line of code will inherit whichever boundary you draw now, whether you draw it on purpose or not.