Team Topologies: Organizing Business and Technology Teams for Fast Flow
Rate it:
8%
Flag icon
Businesses can no longer choose between optimizing for stability and optimizing for speed.
8%
Flag icon
We need to rely instead on decoupled, long-lived teams that can collaborate effectively to meet the challenge of balancing speed and safety.
8%
Flag icon
Systems thinking focuses on optimizing for the whole, looking at the overall flow of work, identifying what the largest bottleneck is today, and eliminating it. Then repeat.
9%
Flag icon
by explicitly agreeing on interaction modes with other teams, expectations on behaviors become clearer and inter-team trust grows.
10%
Flag icon
as Conway’s law: “Organizations which design systems . . . are constrained to produce designs which are copies of the communication structures of these organizations.”
10%
Flag icon
thinking of software architecture as a standalone concept that can be designed in isolation and then implemented by any group of teams is fundamentally wrong.
10%
Flag icon
When cognitive load isn’t considered, teams are spread thin trying to cover an excessive amount of responsibilities and domains. Such a team lacks bandwidth to pursue mastery of their trade and struggles with the costs of switching contexts.
11%
Flag icon
Dan Pink’s three elements of intrinsic motivation: autonomy (quashed by constant juggling of requests and priorities from multiple teams), mastery (“jack of all trades, master of none”), and purpose (too many domains of responsibility).11
14%
Flag icon
One key implication of Conway’s law is that not all communication and collaboration is good. Thus it is important to define “team interfaces” to set expectations around what kind of work requires strong collaboration and what doesn’t. Many organizations assume that more communication is always better, but this is not really the case.
15%
Flag icon
If the organization has an expectation that “everyone should see every message in the chat” or “everyone needs to attend the massive standup meetings” or “everyone needs to be present in meetings” to approve decisions, then we have an organization design problem.
16%
Flag icon
Fast flow requires restricting communication between teams. Team collaboration is important for gray areas of development, where discovery and expertise is needed to make progress. But in areas where execution prevails—not discovery—communication becomes an unnecessary overhead.
17%
Flag icon
Therefore, an organization should never assign work to individuals; only to teams.
18%
Flag icon
Every part of the software system needs to be owned by exactly one team. This means there should be no shared ownership of components, libraries, or code.
19%
Flag icon
Having established the team as the fundamental means of delivery, organizations also need to ensure that the cognitive load on a team is not too high. A team working with software systems that require too high of a cognitive load cannot effectively own or safely evolve the software.
19%
Flag icon
organizations should not allow a software subsystem to grow beyond the cognitive load of the team responsible for the software.
20%
Flag icon
ask the team, in a non-judgmental way: “Do you feel like you’re effective and able to respond in a timely fashion to the work you are asked to do?”
20%
Flag icon
When measuring cognitive load, what we really care about is the domain complexity—how complex is the problem that we’re trying to solve with software?
21%
Flag icon
a single team (considering the golden seven-to-nine team size) should be able to accommodate two to three “simple” domains.
21%
Flag icon
a team responsible for a complex domain should not have any more domains assigned to them—not even a simple one.
21%
Flag icon
avoid a single team responsible for two complicated domains.
21%
Flag icon
Instead of choosing between a monolithic architecture or a microservices architecture, design the software to fit the maximum team cognitive load.
23%
Flag icon
Office design for effective software delivery should accommodate all of the following modes of work: focused individual work, collaborative intra-team work, and collaborative inter-team work.
28%
Flag icon
with software releases being thrown over the “fence” or “wall” and communication mostly accomplished through tickets.
33%
Flag icon
A stream-aligned team is a team aligned to a single, valuable stream of work; this might be a single product or service, a single set of features, a single user journey, or a single user persona.
33%
Flag icon
The stream-aligned team is the primary team type in an organization, and the purpose of the other fundamental team topologies is to reduce the burden on the stream-aligned teams.
33%
Flag icon
The mission of a platform team is to reduce the cognitive load of stream-aligned teams by off-loading lower level detailed knowledge (e.g., provisioning, monitoring, or deployment), providing easy-to-consume services around them.
34%
Flag icon
This might mean having a mix of generalists and a few specialists. Having only specialized roles would lead to a bottleneck every time a piece of work depended on a specialist who might be currently busy.
39%
Flag icon
teams composed only of people with a single functional expertise should be avoided if we want to deliver software rapidly and safely.
40%
Flag icon
“software developers love building platforms and, without strong product management input, will create a bigger platform than needed.”
43%
Flag icon
Typically, little thought is given to the viability of the boundaries for teams, resulting in a lack of ownership, disengagement, and a glacially slow rate of delivery.
44%
Flag icon
For example, many organizations have taken the time and effort to split up an application monolith into smaller services only to produce a monolithic release further down the deployment pipeline, wasting an opportunity to move faster and safer.
45%
Flag icon
Splitting software can reduce the consistency between different parts of the software and can lead to accidental data duplication across multiple subsystems. The user experience (UX) across multiple parts of the software can be degraded if we’re not careful to achieve a coherent UX, and additional complexity can be introduced if we split software into a more distributed system.
46%
Flag icon
Taking more risk means accepting a higher probability of system or outcome failure in favor of getting changes into the hands of customers faster.
47%
Flag icon
Does the resulting architecture support more autonomous teams (less dependent teams) with reduced cognitive load (less disparate responsibilities)?
49%
Flag icon
“If you have microservices but you wait and do end-to-end testing of a combination of them before a release, what you have is a distributed monolith.”
49%
Flag icon
Fracture planes can be chosen around specific challenges (e.g., technology, regulation, performance, geographic location of staff, user personas) to help avoid hand-offs between teams and promote flow.
50%
Flag icon
A team may have been told it is autonomous and self-organizing, but team members find they have to interact with many other teams in order to complete their work; and this feels frustrating.
52%
Flag icon
For something to be provided as a service—whether a component, an API, a testing tool, or an entire delivery platform—the team responsible must have a strong sense of responsibility toward both the consumers and the viability of the thing they are providing.
55%
Flag icon
the organization is set up to match the communication paths needed in the software and systems architecture.
62%
Flag icon
Modern software delivery must take a completely different approach: the operation of the software should act as and provide valuable signals to the development activities.
63%
Flag icon
Instead of trying to optimize for lowest cost in so-called “maintenance” work, it is essential that organizations use signals from maintenance work as input to software-development activities.