Team Topologies: Organizing Business and Technology Teams for Fast Flow
Rate it:
4%
Flag icon
Lehman’s laws of software evolution, and, in particular, continuing growth, captures the evolutionary pressure to add capabilities as systems are used and new demands or opportunities are perceived.
5%
Flag icon
Team Topologies describes organizational patterns for team structure and modes of interaction, taking the force that the organization exerts on the system as a driving design concern.
5%
Flag icon
We like to think of Team Topologies as a set of music parts for an orchestra or big band, not the melody for a top jazz trumpeter.
7%
Flag icon
an organization is the interaction between people and technology.
7%
Flag icon
Organizations are constrained to produce designs that reflect communication paths.
7%
Flag icon
Limiting communication paths to well-defined team interactions produces modular, decoupled systems.
7%
Flag icon
Restrict team responsibilities to match the maximum team cognitive load.
8%
Flag icon
in a highly collaborative context filled with uncertainty over outcomes, relying on the org chart as a principal mechanism of splitting the work to be done leads to unrealistic expectations. 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.
9%
Flag icon
Team Topologies provides four fundamental team types—stream-aligned, platform, enabling, and complicated-subsystem—and three core team interaction modes—collaboration, X-as-a-Service, and facilitating. Together with awareness of Conway’s law, team cognitive load, and how to become a sensing organization, Team Topologies results in an effective and humanistic approach to building and running software systems.
10%
Flag icon
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
that is why monoliths need to be broken down (in particular, any indivisible software part that exceeds the cognitive capacity of any one team) while keeping a team focus,
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
However, traditional organizations have often been limited in their ability to fully reap the benefits of Agile, Lean IT, and DevOps due to their organizational models. It’s no surprise that there is a strong focus on the more immediate automation and tooling adoption, while cultural and organizational changes are haphazardly addressed.
12%
Flag icon
“If the architecture of the system and the architecture of the organization are at odds, the architecture of the organization wins.”
12%
Flag icon
an organization that is arranged in functional silos (where teams specialize in a particular function, such as QA, DBA, or security) is unlikely to ever produce software systems that are well-architected for end-to-end flow.
14%
Flag icon
By keeping things team sized, we help to achieve what MacCormack and colleagues call “an ‘architecture for participation’ that promotes ease of understanding by limiting module size, and ease of contribution by minimizing the propagation of design changes.”
14%
Flag icon
“if we have managers deciding . . . which services will be built, by which teams, we implicitly have managers deciding on the system architecture.”
14%
Flag icon
Fundamentally, we need to involve technical people in organization design because they understand key software design concepts,
15%
Flag icon
Cohn is addressing the need to ensure that if, logically, two teams shouldn’t need to communicate based on the software architecture design, then something must be wrong if the teams are communicating. Is the API not good enough? Is the platform not suitable? Is a component missing?
15%
Flag icon
A simple way to restrict communication is to move two teams to different parts of the office, different floors, or even different buildings.
15%
Flag icon
we want teams to collaborate, then shared tools make sense. If we need a clear responsibility boundary between teams, then separate tools (or separate instances of the same tool) may be best.
16%
Flag icon
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.
16%
Flag icon
We provided a simple example where an organization could avoid a monolithic database by embedding database skills in the application team, so that they had sufficient autonomy to maintain a separate data store
16%
Flag icon
Driskell and Salas found that teams working as a cohesive unit perform far better than collections of individuals for knowledge-rich, problem-solving tasks that require high amounts of information.
16%
Flag icon
Relying on individuals to comprehend and effectively deal with the volume and nature of information required to build and evolve modern software is not sustainable.
17%
Flag icon
By team, we mean a stable grouping of five to nine people who work toward a shared goal as a unit.
17%
Flag icon
an organization should never assign work to individuals; only to teams.
17%
Flag icon
High trust is what enables a team to innovate and experiment.
17%
Flag icon
A single team: around five to eight people (based on industry experience)
18%
Flag icon
Typically, a team can take from two weeks to three months or more to become a cohesive unit.
18%
Flag icon
There is little value in reassigning people to different teams after a six-month project where the team has just begun to perform well.
18%
Flag icon
there is an emotional adaptation required both from new and old team members in order to understand and accommodate each other’s points of view and work habits (the “storming” stage of Tuckman’s team-development model).
18%
Flag icon
The Tuckman model describes how teams perform in four stages: Forming: assembling for the first time Storming: working through initial differences in personality and ways of working Norming: evolving standard ways of working together Performing: reaching a state of high effectiveness
18%
Flag icon
Team ownership also enables a team to think in multiple “horizons”—from exploration stages to exploitation and execution—to better care for software and its viability.
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.
18%
Flag icon
Outside teams may submit pull requests or suggestions for change to the owning team, but they cannot make changes themselves.
19%
Flag icon
This diverse mix of people also appears to foster better results, as team members make fewer assumptions about the context and needs of their software users.
19%
Flag icon
“abolishment of the annual or merit rating and of management by objective.”20 Looking to reward individual performance in modern organizations tends to drive poor results and damages staff behavior.
19%
Flag icon
Cognitive load was characterized in 1988 by psychologist John Sweller as “the total amount of mental effort being used in the working memory.”
20%
Flag icon
for effective delivery and operations of modern software systems, organizations should attempt to minimize intrinsic cognitive load (through training, good choice of technologies, hiring, pair programming, etc.) and eliminate extraneous cognitive load altogether (boring or superfluous tasks or commands that add little value to retain in the working memory and can often be automated away), leaving more space for germane cognitive load (which is where the “value add” thinking lies).
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
The mission for each team was clear, with less context switching and frequent intra-team communication (thanks to a single shared purpose rather than a collection of purposes).
21%
Flag icon
When in doubt about the complexity of a domain, always prioritize how the responsible team feels about it.
21%
Flag icon
To get started, identify distinct domains that each team has to deal with, and classify these domains into simple (most of the work has a clear path of action), complicated (changes need to be analyzed and might require a few iterations on the solution to get it right), or complex (solutions require a lot of experimentation and discovery). You should finetune the resulting classification by comparing pairs of domains across teams: How does domain A stack against domain B?
21%
Flag icon
The first heuristic is to assign each domain to a single team.
21%
Flag icon
The second heuristic is that a single team (considering the golden seven-to-nine team size) should be able to accommodate two to three “simple” domains.
21%
Flag icon
The third heuristic is that a team responsible for a complex domain should not have any more domains assigned to them—not even a simple one. This is due to the cost of disrupting the flow of work (solving complex problems takes time and focus) and prioritization (there will be a tendency to resolve the simple, predictable problems as soon as they come in, causing further delays in the resolution of complex problems, which are often the most important for the business).
21%
Flag icon
To increase the size of a software subsystem or domain for which a team is responsible, tune the ecosystem in which the team works in order to maximize the cognitive capacity of the team (by reducing the intrinsic and extraneous types of load): Provide a team-first working environment (physical or virtual). (You’ll see more later in this chapter). Minimize team distractions during the workweek by limiting meetings, reducing emails, assigning a dedicated team or person to support queries, and so forth. Change the management style by communicating goals and outcomes rather than obsessing over ...more
22%
Flag icon
the team tends to easily develop a shared mental model of the software being worked on. Research has shown that the similarity of team mental models is a good predictor of team performance,
« Prev 1 3