{"id":1497,"date":"2023-12-03T11:35:31","date_gmt":"2023-12-03T11:35:31","guid":{"rendered":"https:\/\/blog.thomarite.uk\/?p=1497"},"modified":"2024-03-03T11:22:36","modified_gmt":"2024-03-03T11:22:36","slug":"team-topologies","status":"publish","type":"post","link":"https:\/\/blog.thomarite.uk\/index.php\/2023\/12\/03\/team-topologies\/","title":{"rendered":"Team Topologies"},"content":{"rendered":"\n<p>I am reading this <a href=\"https:\/\/teamtopologies.com\/book\">book<\/a> as part of a book club at work.  <\/p>\n\n\n\n<p>The summary for the first part (chapters 1-3)<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1 The problem with organization charts:<\/h2>\n\n\n\n<p>The software tends to match the organization charts (top-down) and that is not a good approach for software development because that doesnt cover (current) good software practices (devops, agile, lean, etc). This is based on Conway\u2019s law: \u201cOrganizations which design systems . . . are constrained to produce designs which are copies of the communication structures of these organizations.\u201d<\/p>\n\n\n\n<p>So instead of using org charts, move to a &#8220;teams&#8221; organization approach that authors call &#8220;team topologies&#8221;: adaptive model for technology organization design that allows businesses to achieve speed and stability. Focuses on how to set up dynamic team structures and interaction modes that can help teams adapt quickly to new conditions, and achieve fast and safe software delivery.<\/p>\n\n\n\n<p>Cognitive load can be a powerful tool for deciding on team size, assigning responsibilities, and establishing boundaries with other teams.<\/p>\n\n\n\n<p>Dan Pink\u2019s three elements of intrinsic motivation: <strong>autonomy<\/strong> (quashed by constant juggling of requests and priorities from multiple teams), <strong>mastery<\/strong> (\u201cjack of all trades, master of none\u201d), and <strong>purpose<\/strong> (too many domains of responsibility)<\/p>\n\n\n\n<p>Personally, I think the org chart still has a point from HR perspective, at least I want to know who is who.And disagree when they say &#8220;there is a strong focus on the more immediate automation and tooling adoption, while cultural and organizational changes are haphazardly addressed&#8221;. People dont change tools that easily. And company culture hardly is checked out.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">2 Conway\u2019s Law and Why It Matters<\/h2>\n\n\n\n<p>The idea to become a high-performing organization is to reverse Conway law as a team-first software architecture. Then you need things team sized. The size needs to maximizes people\u2019s ability to work with it. Important to define \u201cteam interfaces\u201d to set expectations around what kind of work requires strong collaboration and what doesn\u2019t (some type of communications are not needed). Tools selection is important, one doesn&#8217;t fit all. Unnecessary re-org (without any proper justification)\/cut headcounts are bad (obviously).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">3- Team-First Thinking<\/h2>\n\n\n\n<p>Follow: team-first architecture. Examples:<\/p>\n\n\n\n<p>-US Army have adopted the team as the fundamental unit of operation. Based on scaling by Dunbar (5-7 people max)<br>-google: teams matter more than individuals.<br>-aws: team of size to feed with 2 pizzas)<\/p>\n\n\n\n<p><br>Maximize trust between people on a team, and that means limiting the number of team members. Adding new people to a team doesn\u2019t immediately increase its capacity (Fred Brooks &#8211; The Mythical Man-Month)<br><\/p>\n\n\n\n<p>The best approach to team lifespans is to keep the team stable<br><\/p>\n\n\n\n<p>Every part of the software system needs to be owned by exactly one team: no shared ownership<\/p>\n\n\n\n<p>You need in the team:<br>&#8211; Team-First Mindset<br>&#8211; Diversity<br>&#8211; Rewards teams, no individuals<br>&#8211; Restrict Team Responsibilities to Match Team Cognitive Load more space for germane cognitive load (which is where the \u201cvalue add\u201d thinking lies).<br>team needs the space to continuously try to reduce the amount of intrinsic and extraneous load<\/p>\n\n\n\n<p>Measure the Cognitive Load Using Relative Domain Complexity: mastering a single domain -&gt; mission is clear, less context switching.<br><\/p>\n\n\n\n<p>Limit the Number and Type of Domains per Team: simple, complicated, complex. Complex only one team,<\/p>\n\n\n\n<p>Design the system and its software boundaries to fit the available cognitive load within delivery teams.<\/p>\n\n\n\n<p>To increase the size of a software subsystem or domain for which a team is responsible:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>team-first work env<\/li>\n\n\n\n<li>minimize distractions<\/li>\n\n\n\n<li>goals and outcomes (good) vs how (bad)<\/li>\n\n\n\n<li>dev-exp<\/li>\n<\/ul>\n\n\n\n<p>Teams need a team API and well-defined team interactions (aws: everything is an API): code, version, wiki\/doc, principles, communication\/information<br><\/p>\n\n\n\n<p>As well, provide time, space, and money to enable inter teams collaboration<br><\/p>\n\n\n\n<p>Explicitly Design the Physical and Virtual Environments to Help Team Interactions: I think the physical site is kind of clear  (there are good notes) but for the virtual env they just mention group chats.<br><br>physical: office layout, whiteboards, standing desks?, noise, clear desk (lockers)<br>(squads -&gt; tribes)<\/p>\n\n\n\n<p>Summary: Limit Teams\u2019 Cognitive Load and Facilitate Team Interactions to Go Faster<\/p>\n\n\n\n<p>===<\/p>\n\n\n\n<p>part2<\/p>\n\n\n\n<p>In Part I, we saw the strong pull that Conway\u2019s law exercises on system architecture by mirroring team structures and communication paths in the final product design. We also highlighted that efficient software delivery requires a team-first approach that relies on long-lived autonomous teams achieving fast flow. Part II will focus on how we put these two ideas together in a way that maximizes flow yet respects the cognitive limits of teams.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CHAPTER 4: Static team topologies<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Instead of structuring teams according to technical know-how or activities, organize teams according to business domain areas.<\/li>\n<\/ul>\n\n\n\n<p>Summary<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Ad hoc or constantly changing team design slows down software delivery.<\/li>\n\n\n\n<li>There is no single definitive team topology but several inadequate topologies for any one organization.<\/li>\n\n\n\n<li>Technical and cultural maturity, org scale, and engineering discipline are critical aspects when considering which topology to adopt.<\/li>\n\n\n\n<li>In particular, the feature-team\/product-team pattern is powerful but only works with a supportive surrounding environment.<\/li>\n\n\n\n<li>Splitting a team\u2019s responsibilities can break down silos and empower other teams.<\/li>\n<\/ul>\n\n\n\n<p>Notes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>team anti-paterns<br>&#8211;Organizations must design teams intentionally by asking these questions: Given our skills, constraints, cultural and engineering maturity, desired software architecture, and business goals, which team topology will help us deliver results faster and safer? How can we reduce or avoid handovers between teams in the main flow of change? Where should the boundaries be in the software system in order to preserve system viability and encourage rapid flow? How can our teams align to that?<\/li>\n\n\n\n<li>design for flow of change: Spotify: journey in progress, not a journey completed.<\/li>\n\n\n\n<li>Shape team intercommunication to enable flow and sensing:<br>&#8212; Organizations that value information feedback from live (production) systems can not only improve their software more rapidly but also develop a heightened responsiveness to customers and users.<\/li>\n\n\n\n<li>devops and the devops topologies<br>&#8211;A key contribution of DevOps was to raise awareness of the problems lingering in how teams interacted (or not) across the delivery chain, causing delays, rework, failures, and a lack of understanding and empathy toward other teams.<\/li>\n\n\n\n<li>devops topologies<br>&#8211;The DevOps Topologies reflect two key ideas: (1) There is no one-size-fits-all approach to structuring teams for DevOps success. The suitability and effectiveness of any given topology depends on the organization\u2019s context. (2) There are several topologies known to be detrimental (anti-patterns) to DevOps success, as they overlook or go against core tenets of DevOps. In short, there is no \u201cright\u201d topology, but several \u201cbad\u201d topologies for any one organization.<\/li>\n\n\n\n<li>successful team patterns<br>&#8211;The success of different types of teams does not depend solely on team members\u2019s skills and experience; it also depends on (perhaps most importantly) the surrounding environment, teams, and interactions.<\/li>\n\n\n\n<li>Feature Teams Require High-Engineering Maturity and Trust<br>&#8211;The feature team typically needs to touch multiple codebases, which might be owned by different component teams.<br>&#8211;someone still had to keep oversight of the system as a whole and ensure subsystems integrated and interacted according to the desired user experience, performance, and reliability. &#8211;&gt; create specific roles: system architects, system owners, or integration leads.<\/li>\n\n\n\n<li>Product Teams Need a Support System<br>&#8211;The key for the team to remain autonomous is for external dependencies to be non-blocking, meaning that new features don\u2019t sit idle, waiting for something to happen beyond the control of the team &#8211;&gt; Non-blocking dependencies often take the form of self-service capabilities<\/li>\n\n\n\n<li>Cloud Teams Don\u2019t Create Application Infrastructure<br>&#8212; cloud team providing high-quality self-services that match both the needs of product teams and the need for adequate risk and compliance management.<\/li>\n<\/ul>\n\n\n\n<p>-SRE Makes Sense at Scale<br>&#8211;The SRE model sets up a healthy and productive interaction between the development and SRE teams by using service-level objectives (SLOs) and error budgets to balance the speed of new features with whatever work is needed to make the software reliable.<br>&#8211;SRE is a dynamic balance between a commitment to operability from the application-development team and expertise from the SRE team. Without a high degree of engineering discipline and commitment from management, this fine balance in SRE can easily degrade into a traditional \u201cus and them\u201d silo that leads to repeated service outages and mistrust between teams.<\/p>\n\n\n\n<p>-Considerations When Choosing a Topology<\/p>\n\n\n\n<p>-Technical and Cultural Maturity<\/p>\n\n\n\n<p>-Quadrant: Organization Size \/ Software Scale vs Engineering Maturity<\/p>\n\n\n\n<p>-Splitting Responsibilities to Break Down Silos<br>&#8211;highlight the importance of thinking about teams\u2019 capabilities (or lack thereof) and how that causes dependencies between teams.<\/p>\n\n\n\n<p>-Dependencies and Wait Times between Teams<br>&#8211;three different categories of dependency: knowledge, task, and resource dependencies.<br>&#8211;Detect and track interdependencies.<\/p>\n\n\n\n<p>-Detect and track interdependencies.<\/p>\n\n\n\n<p>Summary: Adopt and Evolve Team Topologies that Match Your Current Context<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CHAPTER 5: The Four Fundamental Team Topologies<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The architecture of the system gets cemented in the forms of the teams that develop it<\/li>\n\n\n\n<li>Four fundamental team topologies:<br>&#8211;Stream-aligned team<br>&#8211;Enabling team<br>&#8211;Complicated-subsystem team<br>&#8211;Platform team<\/li>\n<\/ul>\n\n\n\n<p>There is no \u201cOps\u201d team or \u201csupport\u201d team in the fundamental topologies,<\/p>\n\n\n\n<p>Summary<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>The four fundamental team topologies simplify modern software team interactions.<\/li>\n\n\n\n<li>Mapping common industry team types to the fundamental topologies sets up organizations for success, removing gray areas of ownership and overloaded\/underloaded teams.<\/li>\n\n\n\n<li>The main topology is (business) stream-aligned; all other topologies support this type.<\/li>\n\n\n\n<li>The other topologies are enabling, complicated-subsystems, and platform.<\/li>\n\n\n\n<li>The topologies are often \u201cfractal\u201d (self-similar) at large scale: teams of teams.<\/li>\n<\/ul>\n\n\n\n<p>Notes<\/p>\n\n\n\n<p>-Stream-Aligned Teams<br>&#8211;A \u201cstream\u201d 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.<br>&#8211;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<br>\u201cyou build it, you run it\u201d popularized by Werner Vogels, CTO of Amazon<\/p>\n\n\n\n<p>-Capabilities within a Stream-Aligned Team<br>&#8211;This might mean having a mix of generalists and a few specialists.<\/p>\n\n\n\n<p>-Why Stream-Aligned Team, Not \u201cProduct\u201d or \u201cFeature\u201d Team?<br>&#8211;a stream should flow unimpeded.<\/p>\n\n\n\n<p>-Expected Behaviors in an effective stream-aligned team<br>&#8212; several features:<br>&#8211;roduce a steady flow of feature delivery, uses an experimental approach to product evolution, expecting to constantly learn and adapt., minimal (ideally zero) hand-offs of work to other teams., evaluated on the sustainable flow of change it produces, must have time and space to address code quality changes (tech debt), proactively and regularly reaches out to the supporting fundamental-topologies teams (complicated subsystem, enabling, and platform).feel they have achieved or are in the path to achieving \u201cautonomy, mastery, and purpose<\/p>\n\n\n\n<p>-Enabling Teams<br>&#8211;An enabling team is composed of specialists in a given technical (or product) domain, and they help steam-aligned team with improving their capabilties (read, learn, practice new skills). It is a &#8220;technical consulting team&#8221; &#8211; gives guidance, not execution.<\/p>\n\n\n\n<p>-Expected Behaviors<br>&#8212; proactivively seeks to understand needs of stream team, ahead of the tech curve, messenger of good\/bad news, might act as a proxy for difficult services, promotes learning across teams<br>&#8212; Stream-aligned teams should expect to work with enabling teams only for short periods of time (weeks or months) in order to increase their capabilities around a new technology, concept, or approach.<\/p>\n\n\n\n<p>-Enabling team vs Communities of Practice (CoP)<br>&#8212; Enabling teams and CoP can co-exist because they have slightly different purposes and dynamics: 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,<\/p>\n\n\n\n<p>-Complicated-Subsystems Teams<br>&#8211;A 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.<br>&#8211;complicated-subsystem team is created only when a subsystem needs mostly specialized knowledge. The decision is driven by team cognitive load, not by a perceived opportunity to share the component.<br>&#8211;we expect to have only a few complicated-subsystem teams in a Team Topologies\u2013driven organization<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Expected behaviors<br>&#8211;off-load work from stream-aligned teams on particularly complicated subsystems that need to be developed by a group of specialists.<\/li>\n<\/ul>\n\n\n\n<p>-Platform teams<br>&#8211;enable stream-aligned teams to deliver work with substantial autonomy.<br>&#8211;The platform team\u2019s knowledge is best made available via self-service capabilities via a web portal and\/or programmable API &#8212; Ease of use.<br>&#8211;the platform can provide different levels of service.<\/p>\n\n\n\n<p>-Expected behavior<br>&#8211;strong collaboration with stream-aligned teams to understand their needs.,fast prototyping techniques and involves stream-aligned team members for fast feedback<\/p>\n\n\n\n<p>-Compose the Platform from Groups of Other Fundamental Teams<br>&#8211;ested or \u201cfractal\u201d teams within the platform\u2014what we like to call inner topologies.<\/p>\n\n\n\n<p>-Avoid Team Silos in the Flow of Change<\/p>\n\n\n\n<p>-A Good Platform Is \u201cJust Big Enough\u201d<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>aim for a thinnest viable platform (TVP) and avoid letting the platform dominate the discourse.<\/li>\n\n\n\n<li>Cognitive Load Reduction and Accelerated Product Development: The most important part of the platform is that it is built for developers.\u201d<\/li>\n<\/ul>\n\n\n\n<p>-Compelling, Consistent, Well-Chosen Constraints: Dev Experience (User experience UX)<\/p>\n\n\n\n<p>-Built On an Underlying Platform (platform layers)<\/p>\n\n\n\n<p>-Manage as a Live Product or Service: using software-product-management techniques<\/p>\n\n\n\n<p>-Convert Common Team Types to the Fundamental Team Topologies<\/p>\n\n\n\n<p>-Move to Mostly Stream-Aligned Teams for Longevity and Flexibility<\/p>\n\n\n\n<p>-Infrastructure Teams to Platform Teams<\/p>\n\n\n\n<p>-Component Teams to Platform or Other Team Types<\/p>\n\n\n\n<p>-Tooling Teams to Enabling Teams or Part of the Platform<\/p>\n\n\n\n<p>-Converting Support Teams: 1) support teams aligned to the stream of changes, and (2) dynamic cross-team activity to resolve live service incidents.<\/p>\n\n\n\n<p>-Converting Architecture and Architects<br>&#8211;The most effective pattern for an architecture team is as a part-time enabling team (if one is needed at all)<br>&#8211;to help them achieve better outcomes and provide them the tools and technologies that will enable these outcomes.\u201d<\/p>\n\n\n\n<p>-Summary: Use Loosely Coupled, Modular Groups of Four Specific Team Types<br>&#8211;stream aligned, enabling, complicated subsystem, and platform.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CHAPTER 6<\/h2>\n\n\n\n<p>Summary<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Choose software boundaries using a team-first approach.<\/li>\n\n\n\n<li>Beware of hidden monoliths and coupling in the software-delivery chain.<\/li>\n\n\n\n<li>Use software boundaries defined by business-domain bounded contexts.<\/li>\n\n\n\n<li>Consider alternative software boundaries when necessary and suitable.<\/li>\n<\/ul>\n\n\n\n<p>Notes<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>I am reading this book as part of a book club at work. The summary for the first part (chapters 1-3) 1 The problem with organization charts: The software tends to match the organization charts (top-down) and that is not a good approach for software development because that doesnt cover (current) good software practices (devops, &hellip; <a href=\"https:\/\/blog.thomarite.uk\/index.php\/2023\/12\/03\/team-topologies\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Team Topologies&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[],"class_list":["post-1497","post","type-post","status-publish","format-standard","hentry","category-books"],"_links":{"self":[{"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/posts\/1497","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/comments?post=1497"}],"version-history":[{"count":3,"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/posts\/1497\/revisions"}],"predecessor-version":[{"id":1629,"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/posts\/1497\/revisions\/1629"}],"wp:attachment":[{"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/media?parent=1497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/categories?post=1497"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.thomarite.uk\/index.php\/wp-json\/wp\/v2\/tags?post=1497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}