Team Topologies: Organizing Business and Technology Teams for Fast Flow
Rate it:
27%
Flag icon
“we must . . . ensure delivery teams are cross-functional, with all the skills necessary to design, develop, test, deploy, and operate the system on the same team.”5
28%
Flag icon
Even though many people see DevOps as fundamentally addressing technological aspects of automation and tooling, only organizations that also address fundamental misalignments between teams are able to achieve the full potential benefits from adopting DevOps.
28%
Flag icon
The topologies became an effective reference of team structures for enterprise software delivery; however, they were never meant to be static structures, but rather a depiction of a moment in time influenced by multiple factors, like the type of products delivered, technical leadership, and operational experience. The implicit idea was that teams should evolve and morph over time.
29%
Flag icon
Product teams (identical in purpose and characteristics to a feature team but owning the entire set of features for one or more products)
29%
Flag icon
The key for the team to remain autonomous is for external dependencies to be non-blocking, meaning that new features don’t sit idle, waiting for something to happen beyond the control of the team.
29%
Flag icon
Non-blocking dependencies often take the form of self-service capabilities
29%
Flag icon
Creating product teams without a compatible support system, consisting of easy-to-consume services (preferably via a platform-oriented approach) and readily available expertise for tasks that the team is unfamiliar with, creates more bottlenecks.
29%
Flag icon
Cloud Teams Don’t Create Application Infrastructure
29%
Flag icon
Product teams need autonomy to provision their own environments and resources in the cloud, creating new images and templates where necessary. The cloud team might still own the provisioning process—ensuring that the necessary controls, policies, and auditing are in place (especially in highly regulated industries)—but their focus should be in providing high-quality self-services that match both the needs of product teams and the need for adequate risk and compliance management.
29%
Flag icon
there needs to be a split between the responsibility of designing the cloud infrastructure process (by the cloud team) and the actual provisioning and updates to application resources (by the product teams).
29%
Flag icon
If adopted in full, SRE is significantly different from IT operations of the past, due to its focus on the “error budget” (namely defining what is an acceptable amount of downtime) and the ability of SRE teams to push back on poor software.
29%
Flag icon
not every development team at Google uses SRE. “Downscale the SRE support if your project is shrinking in scale, and finally let your development team own the SRE work if the scale doesn’t require SRE support,”
30%
Flag icon
Initially (#1 in Figure 4.3), the application development team alone builds and runs the software in production until the scale merits SRE help. During a second stage (#2 in Figure 4.3), as the application usage increases, SRE provides guidance (represented in green) to the application development team on how to make the application work better at global scale. Later, SRE becomes fully involved by running and supporting the application (but still collaborating with the application team) when the scale merits it (#3 in Figure 4.3). At this point, the product owner for the application must ...more
30%
Flag icon
If the organization has a high level of engineering maturity and discipline, then the SRE model described earlier may be effective at scale as well.
32%
Flag icon
The “DevOps team” anti-pattern is a quintessential example. On paper, it makes sense to bring automation and tooling experts in house to accelerate the delivery and operations of our software. However, this team can quickly become a hard dependency for application teams if the DevOps team is being asked to execute steps on the delivery path of every application, rather than helping to design and build self-service capabilities that application teams can rely on autonomously.
33%
Flag icon
A “stream” is the continuous flow of work aligned to a business domain or organizational capability. Continuous flow requires clarity of purpose and responsibility so that multiple teams can coexist, each with their own flow of work.
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
Different streams can coexist in an organization: specific customer streams, business-area streams, geography streams, product streams, user-persona streams, or even compliance streams (in highly regulated industries).
33%
Flag icon
This stands in stark contrast to traditional work allocation, whereby either a large request by a single customer or a set of smaller requests by multiple customers get translated into a project. Once the project is approved and funded, several teams will potentially get involved (e.g., front-end, back-end, and DBA teams) and be required to fit the new work into their existing backlog.
34%
Flag icon
Application security Commercial and operational viability analysis Design and architecture Development and coding Infrastructure and operability Metrics and monitoring Product management and ownership Testing and quality assurance User experience (UX)
34%
Flag icon
This might mean having a mix of generalists and a few specialists.
34%
Flag icon
why talking about streams makes more sense than talking about products or features. Aligning a team’s purpose with a stream helps to reinforce a focus on flow at the organization level—a stream should flow unimpeded.
34%
Flag icon
Not only is the term “stream aligned” more suited to a wider range of situations than either “product” of “feature,” but “stream aligned” also incorporates and helps to emphasize a sense of flow (because a stream flows). Finally, not all software situations need products or features (especially those focused on providing public services), but all software situations benefit from alignment to flow.
34%
Flag icon
A stream-aligned team must have time and space to address code quality changes (sometimes called “tech debt”) to ensure that changing the code remains safe and easy to do.
34%
Flag icon
“autonomy, mastery, and purpose,”
35%
Flag icon
But how can a stream-aligned team with end-to-end ownership find the space for researching, reading about, learning, and practicing new skills?
35%
Flag icon
An enabling team is composed of specialists in a given technical (or product) domain, and they help bridge this capability gap.
35%
Flag icon
This allows the stream-aligned team the time to acquire and evolve capabilities without having to invest the associated effort
35%
Flag icon
(in our experience, such efforts and their impact on the rest of the team also tend to be dramatically underestimated by ten to fifteenfold).
35%
Flag icon
guidance. Jutta Eckstein calls them “Technical Consulting Teams,”8 a definition that maps well to what we’d expect a consulting team to provide (guidance, not execution), whether internal or external to the organization.
35%
Flag icon
The end goal of an enabling team is to increase the autonomy of stream-aligned teams by growing their capabilities with a focus on their problems first, not the solutions per se.
35%
Flag icon
If an enabling team does its job well, the team that it is helping should no longer need the help from the enabling team after a few weeks or months;
35%
Flag icon
Knowledge transfer between an enabling and a stream-aligned team can take shape on a temporary basis
35%
Flag icon
on a long-term basis
35%
Flag icon
the mission of enabling teams is to help stream-aligned teams acquire missing capabilities, usually around a specific technical or product management area.
35%
Flag icon
Introducing new build and deployment tooling without tackling the underlying culture and development teams’ skills can actually do more harm than good.
36%
Flag icon
Time taken per successful deployment Absolute number of successful deployments per day Time taken to fix a failing deployment Time from code commit to deployment (cycle time)
36%
Flag icon
I felt strongly that an engineering enablement team should plan for its own extinction from the very first day to avoid other teams becoming dependent.
36%
Flag icon
We estimated that a quarter of our team’s time was spent actually implementing solutions; the rest was sharing knowledge.
36%
Flag icon
Failing build fixed within twenty-three hours on average (previously there had never been a green build!)
36%
Flag icon
After the new skills and understanding have been embedded in the stream-aligned team, the enabling team will stop daily interaction with the stream-aligned team, switching their focus to a different team.
36%
Flag icon
The members of an enabling team work on enabling activities full-time, whereas a CoP is a more diffuse grouping of interested individuals from across several teams, with an aim to share practices and improve working methods on a weekly (or monthly) basis.
36%
Flag icon
an enabling team is a small, long-lived group of specialists focused on building awareness and capability for a single team (or a small number of teams) at any one point in time, whereas a CoP usually seeks to have more widespread effects, diffusing knowledge
36%
Flag icon
complicated-subsystem team is responsible for building and maintaining a part of the system that depends heavily on specialist knowledge, to the extent that most team members must be specialists in that area of knowledge in order to understand and make changes to the subsystem.
36%
Flag icon
We can’t expect to embed the necessary specialists in all the stream-aligned teams that make use of the subsystem;
36%
Flag icon
Examples of complicated subsystems might include a video processing codec, a mathematical model, a real-time trade reconciliation algorithm, a transaction reporting system for financial services, or a face-recognition engine.
36%
Flag icon
The critical difference between a traditional component team (created when a subsystem is identified as being or expected to be shared by multiple systems) and a complicated-subsystem team is that the complicated-subsystem team is created only when a subsystem needs mostly specialized knowledge.
36%
Flag icon
The decision is driven by team cognitive load, not by a perceived opportunity...
This highlight has been truncated due to consecutive passage length restrictions.
37%
Flag icon
The complicated-subsystem team correctly prioritizes and delivers upcoming work respecting the needs of the stream-aligned teams that use the complicated subsystem.
37%
Flag icon
The purpose of a platform team is to enable stream-aligned teams to deliver work with substantial autonomy. The stream-aligned team maintains full ownership of building, running, and fixing their application in production. The platform team provides internal services to reduce the cognitive load that would be required from stream-aligned teams to develop these underlying services.