Leer en español · Lire en français · Auf Deutsch lesen
Section 11.5 of 11.8 · Advanced · 24 min read
Team Topologies and socio-technical design
Video lesson
5 min · narrated, with captionsListen only (audio)
Read the transcript
Who owns each part of a system matters as much as how the parts are drawn. In this lesson you'll learn to design teams and software together, using Team Topologies.
Think of a restaurant group. Each restaurant's kitchen serves its own diners, from start to finish. A central supplier delivers ingredients and equipment to every kitchen from a simple catalogue, so the cooks needn't run a farm. A specialist pastry workshop makes the one product that's too difficult for every kitchen to master. And a visiting head chef spends a few weeks teaching a kitchen a new technique, then leaves. Team Topologies gives software organisations the same four kinds of team.
Conway's law says a system tends to copy the way its teams communicate. So deciding how teams are formed, and what each one owns, is an architectural decision. Team Topologies, by Matthew Skelton and Manuel Pais, first published in 2019, aims for fast flow: a steady stream of small changes, with little waiting between teams. Its teams are long-lived, and usually five to nine people. For architects, this changes the job. A service boundary is only good if some team can own it fully.
Most teams should be stream-aligned: aligned to one flow of change, such as ordering, and owning it end to end, right through to running it in production. They're the default. The other three types exist to reduce their burden. A platform team provides internal services, such as pipelines, runtime and observability, as a product. Other teams consume it through self-service. That's the X-as-a-Service mode. An enabling team of specialists helps another team gain a capability, here reliability, and then moves on. That's the facilitating mode. A complicated subsystem team owns a part that needs rare expertise, such as the dispatch algorithm. Here it works in collaboration with the couriers team, for a limited time. Collaboration should be time-boxed. And if a team meant to use a service keeps needing meetings, the interface or the boundary is probably wrong.
Team cognitive load is the total a team must hold in its heads to build, run and change what it owns. Overload it, and you get slow delivery, fragile on-call and knowledge stuck in one or two people. So size responsibilities deliberately. Give each domain to a single team. A team can usually handle two or three simple domains, but a team with a complex domain should own nothing else. Reduce extraneous load, the difficulty that comes from how the work is set up rather than from the domain itself, with platforms, automation and good documentation. And when something grows too big for one team, split it along a fracture plane. A bounded context is usually best. Splitting by technology alone, such as mobile and back end, is generally the weakest choice.
Here's the food delivery platform's redesign. It has thirty eight engineers in five teams, one per technical layer. An idea takes about six weeks to reach production, and all the teams coordinate their releases every fortnight. First, map the streams. Of the last fifty features, forty four fell mainly in one of three flows: customer ordering, restaurant partners and delivery. Second, check the fracture planes. These are already separate bounded contexts, so the code can follow. And courier assignment uses a solver only three engineers understand: a candidate complicated subsystem. Third, size the teams: three stream-aligned teams of seven, a dispatch team of five, a platform team of nine and an enabling team of three. Still thirty eight people. Fourth, choose interaction modes, with end dates. Everyone uses the platform as a service from day one. Delivery and Dispatch collaborate for one quarter, and the enabling team helps Ordering for eight weeks. After two quarters, most features should be delivered by one team without a coordinated release. Persistent cross-team work would show a boundary to revisit.
Reorganising teams doesn't restructure a tightly coupled codebase. For months, new teams will fight the old architecture, so plan team changes and architecture changes as one programme. A common mistake is renaming existing teams with these labels, while ownership, funding and interaction stay the same. Another is a platform team that works through tickets and approvals, so others wait for it. That's a bottleneck, not a platform.
The full section covers team APIs, the thinnest viable platform, and every fracture plane. Next, in Section eleven point six, we look at modernising legacy systems. See you there.
What you need to know
- Socio-technical architecture designs software structure and team structure together, because Conway's law makes each shape the other.
- Team Topologies (Skelton and Pais, 2019; second edition 2025) defines four team types: stream-aligned (the default), platform, enabling and complicated-subsystem.
- Teams interact through three deliberate modes: collaboration (time-boxed discovery), X-as-a-Service (consume a clear interface) and facilitating (help another team gain a capability).
- Team cognitive load, adapted from John Sweller's cognitive load theory (1988), limits how much a team can own; reduce extraneous load with platforms and automation and bound intrinsic load with well-placed boundaries.
- A team API documents what a team offers and expects, both technical interfaces and ways of working; a thinnest viable platform is the smallest platform that genuinely speeds up its users.
- Fracture planes such as bounded contexts, regulatory scope, change cadence, risk and performance isolation show where to split software and teams; technology alone is usually the weakest seam.
- Reorganising teams does not restructure coupled code, so team changes and architecture changes should be planned and evolved together.
Team design is architecture work
Chapter 3 showed that Conway's law is not a curiosity but a force: the system a group of teams builds tends to copy the way those teams communicate. If that is true, then deciding how teams are formed, what each owns and how they interact is an architectural decision, with consequences as lasting as choosing a database or an integration style. The discipline of designing software structure and team structure together is called socio-technical architecture.
The most influential practical framework for doing this is Team Topologies, by Matthew Skelton and Manuel Pais (IT Revolution, 2019; second edition 2025). It starts from a simple aim, fast flow: a steady, sustainable stream of small changes from idea to production, with little waiting between teams. It then offers a small vocabulary for designing organisations that achieve it: four team types, three interaction modes, a limit called team cognitive load, and a technique for finding the seams along which software and teams can be split.
Several premises run through the approach. The team, not the individual, is the unit of delivery: work is given to teams, ownership belongs to teams, and teams are long-lived, so that they accumulate knowledge of their domain and code instead of being assembled for a project and scattered afterwards. Teams are small, usually five to nine people, because trust and shared understanding decline quickly beyond that size (the authors draw on Robin Dunbar's research on group sizes). And team boundaries should be designed for the flow of change, not for the convenience of reporting lines or the history of who built what.
For architects this changes the job. A proposed service boundary is only good if some team can own it fully; a proposed team is only viable if the code it owns lets it work without asking permission from three other teams. The architect who draws boxes without asking who will own each one is designing half the system.
The four fundamental team types
Team Topologies argues that almost every team in a software organisation should be one of four types. The point of so few types is clarity: each type has a different purpose, a different way of measuring success and a different relationship with the other teams, so knowing a team's type tells everyone what to expect from it.
A stream-aligned team is aligned to one flow of change: a product, a customer journey, a user group or a business capability. It owns its part end to end, from discovery through build to running it in production, and should be able to deliver most changes without waiting for anyone. Stream-aligned teams are the default and should be the large majority; the other three types exist to reduce their burden.
A platform team provides internal services (deployment pipelines, a runtime environment, observability, data infrastructure) as a product that stream-aligned teams consume through self-service. A good platform is judged by its users' speed, not by its own feature list. An enabling team consists of specialists who help other teams acquire a capability they lack, such as test automation, observability practices or a new framework, and then move on; its success is measured by the other team no longer needing it. A complicated-subsystem team owns a part that needs rare expertise, such as a pricing engine built on actuarial models, a route-optimisation solver or a video codec, so that stream-aligned teams can use it without having to master it. The book stresses that this type should be used sparingly and only where the specialism is genuine.
The four team types compared
| Team type | Purpose | Owns | Healthy signs | Food-delivery example |
|---|---|---|---|---|
| Stream-aligned | Deliver a continuous flow of change for one part of the business | Features, code, data and operation of its stream, end to end | Releases independently; most changes need no other team; on-call load is bearable | Customer ordering team: menus shown to customers, basket, checkout, order tracking |
| Platform | Reduce the cognitive load of stream-aligned teams through self-service internal products | Internal platform services, their documentation and their reliability | Teams adopt it voluntarily; onboarding a new service takes hours, not weeks | Delivery platform team: pipelines, container runtime, logging and metrics, event broker |
| Enabling | Close capability gaps in other teams, then leave | Know-how, guides, examples; not production code of other teams | Engagements are time-boxed and end with the other team self-sufficient | Reliability enabling team coaching teams on service level objectives and incident practice |
| Complicated subsystem | Encapsulate a specialism too deep for every stream-aligned team | One specialist component behind a clear interface | Consumers use it as a service without needing the specialists in the room | Dispatch optimisation team: the algorithm that assigns couriers to orders |
Team types and interaction modes
Three interaction modes
Team types say what teams are; interaction modes say how they work together. Skelton and Pais argue that ambiguous, ad hoc interaction between teams is a major source of delay, because every unplanned conversation is a dependency. They therefore recommend that every pair of teams that must interact chooses one of three modes deliberately, for a stated period.
In collaboration, two teams work closely together on a shared goal, with blurred responsibilities, for example while discovering how a new capability should be split. It produces fast learning but costs both teams capacity and cognitive load, so it should be time-boxed. In X-as-a-Service, one team provides something (an API, a platform capability, a library) that another consumes with little or no collaboration; this scales well but only works once the boundary is well understood and the interface is good. In facilitating, one team, typically an enabling team, helps another learn or remove an obstacle.
The modes are meant to change. A common sequence is discover then settle: a platform team collaborates with one stream-aligned team for a few weeks to design a new capability, then turns it into a self-service offering and moves to X-as-a-Service. The modes also work as a sensing mechanism. If a team that is supposed to consume a service as a service keeps needing meetings, the interface or the boundary is probably wrong; if two teams have been collaborating for a year, they may really be one team, or the split between them may be in the wrong place.
The three interaction modes
| Mode | What it looks like | Use when | Cost or warning sign |
|---|---|---|---|
| Collaboration | Two teams work as one on a shared problem for a while; joint design sessions, shared backlog items | Discovering a new boundary, technology or capability where nobody yet knows the right interface | High cognitive load on both teams; if it lasts indefinitely, the boundary is probably wrong |
| X-as-a-Service | One team consumes an API, platform or component that another provides, through documentation and self-service | The boundary and interface are well understood and stable | Slow to adapt if the interface is poor; constant support requests show it is not yet a real service |
| Facilitating | Coaching, pairing, examples and short workshops that help a team gain a capability | A team lacks a skill or is blocked by an obstacle it can learn to remove | Turns into doing the other team's work, which builds dependency instead of capability |
Cognitive load as a design constraint
The idea of cognitive load comes from educational psychology. John Sweller's cognitive load theory, first published in 1988, started from the observation that human working memory can hold and process only a few new items at a time, so instruction should be designed not to overload it. The theory distinguishes intrinsic load (the inherent difficulty of the material), extraneous load (difficulty caused by the way the task is presented) and, in later work, germane load (effort that builds lasting understanding). Researchers still debate whether germane load is a separate category, and Team Topologies uses all three as a practical heuristic rather than a measurement.
Section 3.7 introduced the team version of this idea: the total a team must hold in its heads to build, run and change what it owns. What matters here is how to use it as a design constraint. When an architecture assigns a team more than it can understand, the effects are predictable: slower delivery, shallow fixes, fragile on-call, knowledge concentrated in one or two people and, eventually, departures. These are the same symptoms often blamed on poor engineers or poor code.
The book offers rules of thumb for sizing a team's responsibilities by domain complexity: give each domain to a single team; a team can usually handle two or three simple domains; a team that owns a complex domain should own nothing else; and no team should own two complicated domains. Teams can also be asked directly, for example with a short survey on how well they understand their systems, how confident they feel when on call and how much time goes on tooling rather than the domain. Rising ticket queues, long onboarding times and frequent handovers to the one person who understands a component are useful indirect signals.
The architectural responses mirror the three kinds of load. Reduce extraneous load with platforms, automation, paved paths and good documentation. Bound intrinsic load by drawing service and module boundaries so that each team's share of the domain is coherent and of a manageable size, and by putting deep specialisms behind complicated-subsystem interfaces. Protect germane load by leaving time for learning, which is where enabling teams help.
Team APIs and the thinnest viable platform
If teams interact through deliberate modes, each team needs a clear face to the rest of the organisation. Team Topologies calls this the team API: everything the team offers and expects. It includes the technical API (endpoints, events, libraries and their versioning and deprecation rules) but also the human interface: documentation and onboarding guides, the team's roadmap and current priorities, its working practices, the channels where it can be reached, how to request work from it and what response times to expect.
Writing a team API down is a cheap and revealing exercise. It forces a team to say what it owns, which usually exposes unowned services and contested data, and it gives other teams a way to interact without a meeting. Many organisations keep it as a short page in the team's repository, reviewed each quarter alongside the architecture documentation.
The platform deserves particular care because it is where good intentions most often go wrong. A platform built as a large internal project, with a long roadmap and mandatory adoption, can easily add cognitive load rather than remove it. Skelton and Pais recommend the thinnest viable platform: the smallest set of services, documentation and standards that genuinely speeds up its users. For a small organisation that may be a well-kept page listing the cloud provider services teams should use and how; for a large one it may be an internal developer platform. Platform engineering is covered in depth in Chapter 10; the essential point here is that a platform is a product whose customers are other teams, and it should be designed and measured as one.
Fracture planes: where to split software and teams
When a part of the system has grown too big for one team, it has to be split, and the split must work for both the code and the teams. Team Topologies calls the natural seams along which software can be divided fracture planes. The book lists several, and the first is usually the best: a bounded context from domain-driven design, because a boundary that follows the language and rules of the business tends to keep related changes together.
The others are useful when they line up with a real difference in how parts of the system must be treated. Splitting along a technology boundary alone (for example a mobile team and a back-end team) is generally the weakest choice, because most changes then cross it, which is the layered team structure Conway's law warns about.
Fracture planes with food-delivery examples
| Fracture plane | Split when | Example |
|---|---|---|
| Business domain (bounded context) | Parts of the domain have their own language, rules and experts | Ordering, restaurant onboarding and courier management as separate contexts |
| Regulatory compliance | One part is subject to rules that should not burden the rest | Card payment handling kept in a small, audited scope for PCI DSS |
| Change cadence | Some parts change daily and others yearly | Promotions and campaigns change weekly; invoicing rules change rarely |
| Team location | Teams work in time zones with little overlap | A courier operations team in another country owns courier onboarding |
| Risk | Some parts can tolerate experiments and others cannot | Recommendation experiments separated from order acceptance |
| Performance isolation | One part has very different load or latency needs | Live courier location updates separated from menu browsing |
| Technology | A part needs a genuinely different technology stack | A legacy restaurant tablet integration that only runs on old hardware |
| User personas | Different user groups have different needs and journeys | Customers, restaurant staff and couriers each have their own app and team |
Conway's law, the inverse manoeuvre and its limits
Team Topologies is, in effect, a toolkit for the inverse Conway manoeuvre that Section 3.7 described: decide the architecture you want, then shape teams and interaction modes so that Conway's law pushes the system towards it. Its additions are practical. Team types say what kind of team should own each part; interaction modes say which team boundaries are meant to be thin (X-as-a-Service) and which are temporarily thick (collaboration); cognitive load says how much each team can own; fracture planes say where to cut.
The limits from Section 3.7 still apply and are worth restating in this setting. Reorganising teams does not restructure a tightly coupled codebase: for months after a reorganisation the new teams will fight the old architecture, which is why team changes and architecture changes should be planned as one programme. Boundaries that are hardened into teams too early make mistakes expensive, so many organisations keep uncertain boundaries inside one team or one modular monolith until they have evidence. And frequent reorganisations destroy the long-lived team knowledge the approach depends on.
Practitioners also disagree about how literally to apply the framework. Supporters value the shared vocabulary, which turns vague complaints (we keep waiting for the data team) into designable questions (what interaction mode do we want with the data team, and what would make it X-as-a-Service?). Critics warn that the four types are often applied as labels to an unchanged organisation, that real teams sometimes mix types (a platform team that also owns a complicated subsystem) and that the framework says little about funding, management structure or incentives. Both points are fair: the types are a design aid, not an org chart, and the authors themselves present them as a starting point for continuous adjustment.
Worked example
Worked example: redesigning the food-delivery teams around streams
The food-delivery platform has grown to 38 engineers in five teams organised by technical layer: mobile apps, web front end, back-end API, database and operations. Lead time from idea to production is about six weeks, releases are coordinated fortnightly across all teams, and the last three incidents each took several hours because nobody owned a whole customer journey. The architect and engineering leaders redesign the organisation in five steps.
| 1. Map the streams | Event storming and a review of the last 50 features show three main flows of change: customer ordering (menus, basket, checkout, tracking), restaurant partners (onboarding, menus, opening hours, payouts) and delivery (courier onboarding, assignment, live tracking). 44 of the 50 features fell mainly in one of them. |
|---|---|
| 2. Check the software's fracture planes | Ordering, restaurants and delivery are already separate bounded contexts with their own services and databases (Section 11.1), so the code can follow. Courier assignment uses an optimisation solver that only three engineers understand: a candidate complicated subsystem. Card payments stay with Ordering but in a small, separately audited module (regulatory fracture plane). |
| 3. Size teams by cognitive load | Three stream-aligned teams of 7 (each with mobile, web, back-end, testing and operations skills). A complicated-subsystem team of 5 for dispatch optimisation (the three specialists plus two engineers learning the domain). A platform team of 9 that owns pipelines, the container runtime, observability and the event broker. A small enabling team of 3 for reliability practices. Total: 38. |
| 4. Choose interaction modes | Stream-aligned teams consume the platform as X-as-a-Service from day one, using its existing pipelines. Delivery and Dispatch collaborate for one quarter to redesign the assignment interface, then move to X-as-a-Service. The enabling team facilitates Ordering for eight weeks (service level objectives, on-call runbooks), then moves on to Restaurants. |
| 5. Publish team APIs and measure | Each team writes a one-page team API, every service and database table gets exactly one owning team, and leaders track lead time, deployment frequency, cross-team tickets per feature and an on-call confidence survey every quarter. |
| Result to look for | After two quarters, most features should be delivered by one team without a coordinated release; persistent cross-team work would show a boundary to revisit. |
The redesign starts from flows of change and the software's existing boundaries, not from the current reporting lines.
Specialists are concentrated only where the domain demands it (dispatch), and the platform exists to reduce load on stream-aligned teams, not to control them.
Interaction modes come with end dates, so the organisation is expected to evolve rather than be fixed in a new chart.
Before and after
Questions people ask
Are component teams always wrong?
Not always. A team owning a shared component can be the right choice when the component needs deep specialism (a complicated subsystem) or is offered as a genuine self-service product (part of a platform). It becomes a problem when most features need changes in the component and the stream-aligned teams have to queue for it.
Where do architects sit in this model?
Usually not as a separate gatekeeping team. Architects often act like an enabling team, helping stream-aligned teams make good decisions and keeping system-wide qualities visible, and they take part in designing the team structure itself. Section 11.4 discusses how governance can work without gates.
How often should team boundaries change?
Rarely and deliberately. Interaction modes are expected to change every few months; team membership and ownership should be stable for much longer, because long-lived teams are where domain and system knowledge accumulates.
Check your understanding
Name three things a team API contains besides its code interfaces.
For example its documentation and onboarding guides, its roadmap and priorities, its working practices, the channels where it can be reached and how to request work from it.
Why are interaction modes expected to change over time?
Because collaboration suits discovering a new boundary, and once the boundary and interface are understood the teams should settle into X-as-a-Service; modes follow how mature the boundary is.
What is the thinnest viable platform, and why aim for it?
The smallest set of services, documentation and standards that genuinely speeds up the teams using it; a larger platform risks adding cognitive load instead of removing it.
Why is a front-end and back-end team split usually a weak fracture plane?
Because most features cross it, so every change needs both teams, hand-offs and coordinated releases, which is the layered structure Conway's law turns into a layered, coupled system.
Sources and further reading
Have a question about this section? ArchitectBot, the course’s AI study assistant, answers from the course first.
Ask: “We have separate front-end, back-end and database teams and every feature takes weeks. How would I propose a move to stream-aligned teams without breaking everything?”