{"id":3016,"date":"2022-11-21T17:35:43","date_gmt":"2022-11-21T17:35:43","guid":{"rendered":"https:\/\/www.smharter.com\/blog\/?p=3016"},"modified":"2023-03-19T13:50:42","modified_gmt":"2023-03-19T13:50:42","slug":"transcending-agile-cross-team-collaboration-with-shared-work","status":"publish","type":"post","link":"https:\/\/www.smharter.com\/blog\/2022\/11\/21\/transcending-agile-cross-team-collaboration-with-shared-work\/","title":{"rendered":"Transcending Agile cross-team collaboration with Shared work (3-part)"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"476\" height=\"476\" src=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Monad.png\" alt=\"\" class=\"wp-image-3042\" srcset=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Monad.png 476w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Monad-150x150.png 150w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Monad-100x100.png 100w\" sizes=\"auto, (max-width: 476px) 100vw, 476px\" \/><\/figure><\/div>\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><strong>PART ONE<\/strong><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>See also the previous post describing how to make Agile cross-team collaboration frictionless and enjoyable or in one word effective:&nbsp;<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/www.smharter.com\/blog\/2022\/08\/08\/agile-cross-team-collaboration-how-tos-long\/\">Agile Cross-Team Collaboration How-Tos<\/a>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Acknowledgements<\/strong><\/h1>\n\n\n\n<p>My gratitude goes to Bas Vodde (co-author of <em>Scaling Lean &amp; Agile Development<\/em> and <em>Practices for Scaling Lean &amp; Agile Development<\/em>, and co-creator of <em>LeSS<\/em>) for engaging in a long and detailed conversation on this topic.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>What is Shared work<\/strong><\/h1>\n\n\n\n<p>Before Agile went mainstream and the focus on Agile technical practices declined, shared work was widespread and very successful. It was adopted commonly by Agile practitioners where the work involved multiple teams.<\/p>\n\n\n\n<p class=\"has-text-align-left\">Chet Hendrickson (co-author of Extreme Programming Installed) points out that:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><em>Since Agile is simple, a scaled version of Agile should also be that simple, or even simpler. Otherwise, it will no longer be Agile <\/em>~ Excerpt from The Nature of Software Development, by Ron Jeffries, 2015<\/p>\n\n\n\n<p>The shared work approach, up until now, seems to be the best incarnation of Chet&nbsp; Hendrickson&#8217;s statement. What shared work is then?<\/p>\n\n\n\n<p><br><span style=\"text-decoration: underline;\">Shared work can be summed up in two points:<\/span><\/p>\n\n\n\n<p>1) Limiting the number of cross-team dependencies by having each team work across all components and disciplines (analysis, programming, testing, &#8230;) Therefore each team has all the necessary knowledge and skills to complete an end-to-end customer-centric feature.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/autonomous-team.jpg\" alt=\"\" class=\"wp-image-3017\" width=\"517\" height=\"226\" srcset=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/autonomous-team.jpg 800w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/autonomous-team-600x263.jpg 600w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/autonomous-team-768x336.jpg 768w\" sizes=\"auto, (max-width: 517px) 100vw, 517px\" \/><\/figure><\/div>\n\n\n\n<p>2) Transcending any remaining cross-team dependencies by adopting a shared product code ownership where all the teams can work on any part of the product codebase.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/shared-ownership.jpg\" alt=\"\" class=\"wp-image-3018\" width=\"375\" height=\"303\"\/><\/figure><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><meta charset=\"utf-8\"><strong>Knowledge silos Vs. <meta charset=\"utf-8\">generalising specialists<\/strong><\/h4>\n\n\n\n<p>On the opposite side of the shared work spectrum, many organisations end up with knowledge silos. They are created, for example, when an individual or a team picks up a novel problem\/task, and afterwards all the other similar problems\/tasks get assigned to them because they already know how to handle that work. Managers may let this happen because they believe in the efficiencies of specialisation, and a team may let this happen because individual team members may enjoy the feeling of becoming indispensable while others may enjoy remaining inside their comfort zone. <\/p>\n\n\n\n<p>Each knowledge silo tho&#8217; comes with hidden costs such as the creation of a single point of failure and tight constraints on workload distribution and more in general on work prioritisation and planning. To the point that some organisations end up with more managers handling the constraints than those doing the work. In other organisations, the work becomes blocked or delayed most of the time, and people end up multitasking to the point of minimising their productivity.<\/p>\n\n\n\n<p>Since the beginning, Agile has embodied a major departure from this way of thinking about specialisation. It introduced the concept of generalising specialists, also known as T-shaped professionals that add to the depth of their specialisation the breadth of generalist knowledge in areas mostly adjacent to their specialisation.<br>The Extreme in Extreme Programming (XP) is meant as pushing the boundaries of one practice to the extreme, to find where it stops being effective, discovering most of the time that is far beyond where we thought it would be. Pushing the generalising specialists to the extreme showed that, in combination with Pairing and Mobbing AKA Ensemble, teams and team members can acquire more knowledge, become proficient in a broader set of skills, and be effective in many more areas far beyond where we would normally have believed.<\/p>\n\n\n\n<p>With shared work, learning happens whenever the knowledge or skills needed to complete an end-to-end customer-centric feature are missing, the level of generalisation is lacking, or one specialisation is missing. Learning happens by pairing or mobbing with teammates, doing the work with other teams, or hiring a new team member. The specialists in the team are encouraged to pair and mentor instead of working in isolation. Teams are encouraged to seek opportunities to work together. Most professionals, after having tried this form of continuous social learning-by-doing on-the-job, its effectiveness and its value, usually don&#8217;t want to go back.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>Teams participating in Shared work<\/strong><\/h4>\n\n\n\n<p>In conclusion, teams adopting shared work, in addition to being capable of <meta charset=\"utf-8\">completing an end-to-end customer-centric feature autonomously, usually are:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>stable and long-lived (most of the members stay in the team for 18+ months)<\/li><li>with fully dedicated team members (no x% FTE)<\/li><li>cross-functional (as mentioned before)<\/li><li>cross-component (as mentioned before)<\/li><\/ul>\n\n\n\n<p>In the Agile literature, such teams are commonly referred to as <em>Feature Teams<\/em>.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<hr class=\"wp-block-separator is-style-wide\"\/>\n\n\n\n<p class=\"has-text-align-center\"><meta charset=\"utf-8\"> (Part 1)<strong> <a href=\"https:\/\/www.smharter.com\/blog\/2022\/11\/21\/transcending-agile-cross-team-collaboration-with-shared-work\/\/2\/\">Part 2 &gt;&gt;<\/a><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator is-style-wide\"\/>\n\n\n\n<!--nextpage-->\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><strong>PART TWO<\/strong><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>The How-Tos of Shared work<\/strong><\/h1>\n\n\n\n<p>Let&#8217;s have a look at some of the practicalities and options for this approach on how to<\/p>\n\n\n\n<p>1) plan the work,<br>2) consider temporary cross-teams mutual support,<br>3) coordinate the work,<br>4) sequence the work,<br>0) retrospecting the collaboration<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>1) Planning the work<\/strong><\/h4>\n\n\n\n<p>The most common scenario with shared work is to have teams working from the same common product backlog. When the number of teams grows closer to ten, the backlog is partitioned into distinct scope areas (AKA product area) each with a group of about 4\u00f710 teams.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/planning-the-work-1.png\" alt=\"\" class=\"wp-image-3020\" width=\"400\" height=\"355\" srcset=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/planning-the-work-1.png 1146w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/planning-the-work-1-600x534.png 600w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/planning-the-work-1-768x684.png 768w\" sizes=\"auto, (max-width: 400px) 100vw, 400px\" \/><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>When the teams are from the same product or product area (share the same Backlog and the same priorities)<\/strong><br>The product Backlog defines the plan and priorities for all the teams. So no additional planning effort is required other than allowing space for the teams to support each other as they see fit. XP does it with the Slack practice, adding a buffer in the plan in the form of some work that, if needed, can be dropped.<br>During the gradual refinement of the scope, including the high-level technical explorations, some knowledge sharing across teams may be necessary, so it must be allowed. For example, synchronising the teams&#8217; refinement events and making them in physically\/virtually neighbouring rooms.<br><\/li><li><strong>When the teams work on the same product but in different areas of the product (have different Backlogs and priorities, but a common goal and a common decision maker)<\/strong><br>Teams from different product areas can work independently and autonomously thanks to the shared product code ownership. A common decision maker, like an overall Product Owner, may help with decisions related to cross-product-area trade-offs. In the less frequent occasions when teams need to help each other, the teams and their Product area POs and stakeholders may need to harmonise their priorities. They may need to work together to fill skills and knowledge gaps by making the necessary learning happen.<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>2) Consider temporary cross-teams mutual-support<\/strong><\/h4>\n\n\n\n<p>The two options discussed here last for the relatively short time needed to complete the work (a Backlog item, a User Story). And their goal is to allow a team to learn from another team to fill a gap and become able to complete an end-to-end customer-centric feature autonomously.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Temporary-mutual-support-patterns.png\" alt=\"\" class=\"wp-image-3021\" width=\"406\" height=\"234\"\/><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Gelled teams helping each other<\/strong><br>To share knowledge, mentor, and help each other as needed, relevant team members from a donor team, called&nbsp;<em>travellers<\/em>, join the recipient team. Both teams need to be stable long enough (18+ months) to avoid any damages from these temporary changes. Teams shouldn&#8217;t be suffering from knowledge silos either (e.g. they are practising pairing or mobbing\/ensemble preventing knowledge silos).<br><\/li><li><strong>None<\/strong><br>It is the most common scenario. It occurs when the team can complete end-to-end customer-centric features autonomously.<\/li><\/ul>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>3) Coordinating the work<\/strong><\/h4>\n\n\n\n<p>Since every team can complete end-to-end customer-centric features autonomously and there is shared product code ownership, the need for coordination is unusual. It occurs when learning across teams is needed to fill a knowledge or skill gap or where there is a massively large feature that, even after being split, requires multiple teams working closely together.<\/p>\n\n\n\n<p>Below are two relevant approaches with a description of how they fit with the degree of Complexity of the work at hand (find more about the degree of Complexity in the book<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"http:\/\/leanpub.com\/livingcomplexity\/\">&nbsp;Living Complexity<\/a>).<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Coordinating-continuum.png\" alt=\"\" class=\"wp-image-2831\" width=\"733\" height=\"136\"\/><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Self-synchronisation<\/strong><br>Self-synchronisation expects all the members of every team to be empowered to directly share information and coordinate their collaboration and work activities, as needed by the work at hand and its progress and evolutions. Imagine the players of a football team or doubles tennis players and how they work together.<br><br>In the previous point describing gelled teams mutually supporting each other,&nbsp;travellers&nbsp;visit another team to share knowledge and skills. A secondary effect of these&nbsp;travellers&nbsp;is the creation of an informal network of connections that can also serve as an open channel of communication to coordinate the work.<br><br>When the coordination is more intense and requires a more intentional and direct effort, each team can send out&nbsp;<em>scouts<\/em>&nbsp;to the other team(s) to work out the coordination. It can happen for the scope refinement, the planning, the high-level design, as well as while doing the work.<br><br>Since the teams are working on the shared product codebase, the loop of coordination can be closed on the tech side, ensuring additional speed and reliability by practising Continuous Integration, automated build and tests, and trunk-based development.<br><br><em>Work nature<\/em>: This approach is a good fit for a type of work with a high degree of Complexity. Meaning it has a lot of uncertainties, unknowns, rapid changes and a high level of innovativeness. And as such, it requires a high bandwidth of information sharing and interaction and high-speed feedback loops. For the nature of the work, the collaboration protocol cannot be defined upfront and will emerge during the collaboration. It may remain fluid and continuously change until the completion of the work.<br><br><em>Team capability<\/em>: It requires each team involved to be comfortable with this type of collaboration and have a good level of Agility. Below are two relevant approaches with a description of how they fit with the degree of Complexity of the work at hand (find more about the degree of Complexity in the book<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"http:\/\/leanpub.com\/livingcomplexity\/\">&nbsp;Living Complexity<\/a>).<br><\/li><li><strong>Orchestration<\/strong><br>The need for orchestration is an exception since it is needed mainly for a massively large feature that, even after being split, requires multiple teams working closely together.<br><br>With orchestration, someone from each team, like the Scrum Master and the PO, is empowered to form a temporary orchestration workgroup lasting for a limited duration of the collaboration. The group shares relevant information and coordinates the collaboration and work activities across the teams.<br><br>This orchestration workgroup does not act as a (wo)man-in-the-middle. Instead, whenever direct collaboration between members of different teams is needed, they facilitate for it to happen and get out of the way.<br><br>When orchestration is to handle the collaboration due to a massively large feature, one of the teams involved may occasionally take the role of the&nbsp;<em>leading team<\/em>, facilitating the orchestration.<br><br>Work nature: This approach is a good fit for a type of work with some degree of Complexity. Meaning it has some uncertainties, unknowns, and some level of innovativeness. The orchestration facilitates the identification and definition of a collaboration protocol among teams that fits the work at hand: clear collaboration touch points (events) and interfaces (what is exchanged between teams, when, who, etc.)<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Coordinating-the-work-1.png\" alt=\"\" class=\"wp-image-3022\" width=\"451\" height=\"402\" srcset=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Coordinating-the-work-1.png 1118w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Coordinating-the-work-1-600x535.png 600w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Coordinating-the-work-1-768x684.png 768w\" sizes=\"auto, (max-width: 451px) 100vw, 451px\" \/><\/figure><\/div>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>4) Sequencing the work across teams<\/strong><\/h4>\n\n\n\n<p>Since every team can complete end-to-end customer-centric features autonomously and there is a shared product code ownership, there is no need for sequencing the work across teams.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\"><strong>0) Retrospecting the collaboration<\/strong><\/h4>\n\n\n\n<p>The teams that share product code ownership transcend cross-team dependencies and voluntarily collaborate to maintain and evolve the product and its codebase, share knowledge, learn new skills and mentor each other. It means the teams need some degree of consensus on technical practices and ways of helping each other. Several factors and combinations are at play that is impossible to find out upfront what will work well and what will not.<\/p>\n\n\n\n<p>Therefore, to make it work in the given context and circumstances, it is better to begin from a simple starting point and experiment from there, learn, adapt and evolve along the way, with help from regular Retrospectives on all aspects of the collaboration across teams.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Collaboration-retro-1.png\" alt=\"\" class=\"wp-image-3023\" width=\"567\" height=\"312\" srcset=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Collaboration-retro-1.png 1558w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Collaboration-retro-1-600x330.png 600w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Collaboration-retro-1-768x423.png 768w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/Collaboration-retro-1-1536x846.png 1536w\" sizes=\"auto, (max-width: 567px) 100vw, 567px\" \/><\/figure><\/div>\n\n\n\n<p>Organisational bottlenecks, obstacles and inefficiencies affecting the shared work and cross-team collaboration will emerge during the retrospective. It will lead to improvement actions on the governance, structure and composition of the teams, departments and the whole organisation.<br><\/p>\n\n\n\n<p>Viktor Grgic pointed out the need for an organisational continuous improvement. This retrospective plays a big role driving the improvement toward the organisation&#8217;s specific needs and circumstances. It is an alternative to imitating canned solutions, standard solutions, or models copied from different organisations with different needs and circumstances.<\/p>\n\n\n\n<hr class=\"wp-block-separator is-style-wide\"\/>\n\n\n\n<p class=\"has-text-align-center\"><strong><strong><a href=\"https:\/\/www.smharter.com\/blog\/2022\/11\/21\/transcending-agile-cross-team-collaboration-with-shared-work\/\" data-type=\"URL\" data-id=\"https:\/\/www.smharter.com\/blog\/2022\/08\/08\/agile-cross-team-collaboration-how-tos-long\/\">&lt;&lt; Part 1<\/a><\/strong><\/strong> (Part 2) <strong><strong><a href=\"https:\/\/www.smharter.com\/blog\/2022\/11\/21\/transcending-agile-cross-team-collaboration-with-shared-work\/3\/\">Part 3 &gt;&gt;<\/a><\/strong><\/strong><\/p>\n\n\n\n<hr class=\"wp-block-separator is-style-wide\"\/>\n\n\n\n<!--nextpage-->\n\n\n\n<pre class=\"wp-block-verse has-text-align-center\"><strong>PART THREE<\/strong><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>The hard limits of shared work<\/strong><\/h1>\n\n\n\n<p>Sharing product code ownership across multiple teams works far far beyond what most do believe, while it stops working beyond some hard limits. These below are a few examples.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/shared-work-hard-limits.jpg\" alt=\"\" class=\"wp-image-3024\" width=\"543\" height=\"322\" srcset=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/shared-work-hard-limits.jpg 750w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/shared-work-hard-limits-600x356.jpg 600w\" sizes=\"auto, (max-width: 543px) 100vw, 543px\" \/><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Confidentiality:<\/strong>&nbsp;for confidentiality reasons, specific knowledge cannot be shared. Therefore related work is delegated to a specific person or team that will work autonomously.<br><\/li><li><strong>Unlearnable skills:<\/strong>&nbsp;the development of a feature may occasionally require, for a limited period of time, specialistic skills. For example, embedded software development or HW design or modelling dynamic simulations using Matlab Simulink or intellectual property law or chemical toxicology. These skills can be sourced timely and conveniently from an external company team.<br><\/li><li><strong>Different company:<\/strong>&nbsp;whenever the teams are developing a feature for or with another company not willing to share the codebase with them. With the exception of outsourcing, for which there exist better alternatives that can and should be pursued, there are other cases that cannot be avoided, nor the other company can be convinced to share the codebase.<\/li><\/ul>\n\n\n\n<p>Such hard limits can be avoided much more often than we tend to believe (as discussed before regarding the meaning of Extreme in Extreme Programming). Most of the time, it is the prevalent reality for a majority of companies and teams.<\/p>\n\n\n\n<p>Nonetheless, given the widespread and ubiquitous nature of software nowadays, the increased level of interdependence among different departments and organisations, and the heterogeneity of skills, technologies, and ways of working employed, some companies and some teams cross these borders and face these multi-domain challenges more often than others, and they live with this reality.<\/p>\n\n\n\n<p>Whether a hard border gets crossed, the approach described in the previous article becomes more relevant and useful:<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/www.smharter.com\/blog\/2022\/08\/08\/agile-cross-team-collaboration-how-tos-long\/\">&nbsp;Agile Cross-Team Collaboration How-Tos<\/a>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>The soft limits of shared work<\/strong><\/h1>\n\n\n\n<p>The effectiveness of sharing product code ownership across multiple teams starts to gradually decrease when going beyond some soft limits, up to the point that other approaches start to become more advisable. These below are a few examples of soft limits.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/shared-work-soft-limits.jpg\" alt=\"\" class=\"wp-image-3025\" width=\"538\" height=\"308\" srcset=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/shared-work-soft-limits.jpg 750w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/shared-work-soft-limits-600x344.jpg 600w\" sizes=\"auto, (max-width: 538px) 100vw, 538px\" \/><\/figure><\/div>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Team maturity:<\/strong>&nbsp;teams that share the ownership of the product codebase need to reach a consensus on the adoption of some common practices (for example it does not work if one team writes automated tests and another team makes code changes breaking the automated tests and not fixing them). When a new team can&#8217;t adopt some of the practices already in use in the codebase learning must happen. Meanwhile, they may not be 100% productive right away in changing the shared codebase, but they must gradually learn those skills and only make changes they can with their current skills.<br><\/li><li><strong>Cross-cutting concerns:<\/strong>&nbsp;some product changes may involve concerns that cut across the whole codebase and so involve most of all the teams. Think, for example, of the changes to fix the Year 2000 bug, efforts for product internationalisation and localisation, product accessibility, or compliance with GDPR. It may require a massively large feature change where the patterns mentioned before such as&nbsp;<em>Leading team<\/em>,&nbsp;<em>Travellers<\/em>&nbsp;and&nbsp;<em>Scouts<\/em>&nbsp;begin to be insufficient.<br><\/li><li><strong>Politic and authority:<\/strong>&nbsp;the teams and the product codebase may cross the authority lines of the managers willing to <br>share the codebase and its responsibility and agree to common technical practices. Efforts are necessary to build bridges and trust relationships across these formal lines.&nbsp;<\/li><\/ul>\n\n\n\n<p>Whether a soft border gets crossed beyond the point where the shared product codebase ownership remains an effective approach, the approach described in the previous article becomes relevant:<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/www.smharter.com\/blog\/2022\/08\/08\/agile-cross-team-collaboration-how-tos-long\/\">&nbsp;Agile Cross-Team Collaboration How-Tos<\/a>.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>All in all, should shared work be embraced or avoided?<\/strong><\/h1>\n\n\n\n<p>When thinking about collaboration inside a good Agile team, what usually comes to mind is a very positive and fulfilling professional and social experience. An environment where people constantly learn from each other, experiment, achieve more than they thought they could, enjoy the energetic creativity of the group, and succeed together. <\/p>\n\n\n\n<p>Some of those who experienced being in a good Agile team did not want to go back anymore. <\/p>\n\n\n\n<p>Some of those who tried synchronous collaboration \u2013 for example, working in pairs or mob\/ensemble programming \u2013 did not want to go back anymore.<br><\/p>\n\n\n\n<p>Shared work reproduces this same experience across multiple teams.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>My personal experience and what I have learned so far<\/strong><\/h1>\n\n\n\n<p>While I worked in the Ferrari F1 Racing team, we adopted an approach similar to shared work. With a number of teams in the ballpark of 5\u00f710 and a number of people in software development in the ballpark of 30\u00f750.<\/p>\n\n\n\n<p>We were strongly influenced by Extreme Programming and its technical practices.<\/p>\n\n\n\n<p>We worked on two distinct suits of products, the Trackside suite and the Production suite, each containing a number of different applications for the race and the home factory.<\/p>\n\n\n\n<p>The codebase was about 10 years old, so it used older tools and technologies from that timespan, not only the latest and greatest. The size of the codebase was a multiple of what all the teams together could master. And we faced a multi-domain challenge involving other specialistic and non-software domains such as embedded software development, dynamic simulations modelling using Matlab Simulink, and Hardware in the loop simulation. We also faced the challenge of confidentiality for some information and domain details.<\/p>\n\n\n\n<p>Most of the applications were mission-critical, and we worked in a fast-paced and high-pressure environment.<\/p>\n\n\n\n<p>We faced the hard limits listed before and some soft limits too. Over time we managed to work around some of the hard limits, and the advantages were evident.<\/p>\n\n\n\n<p>From a technical point of view, we used a one-repo approach with a very reactive Continuous Integration, Trunk Based Development, elements of Continuous Delivery including automated remediations plans (for example see<a rel=\"noreferrer noopener\" target=\"_blank\" href=\"https:\/\/www.infoq.com\/articles\/continuous-delivery-coding-patterns\/\">&nbsp;https:\/\/www.infoq.com\/articles\/continuous-delivery-coding-patterns\/<\/a>).<\/p>\n\n\n\n<p>The biggest challenge we faced with shared work was the size and age of the codebase, together with the complexity of the domains and the number of different technologies employed. We made an explicit effort to limit the number of different technologies added to the codebase to keep the number of skills required at a manageable level. And we made an effort to solve similar problems in various parts of the codebase in similar ways, to avoid unnecessary complexity. And we made an effort to make the code easier to read, understand, change and evolve.<\/p>\n\n\n\n<p>In a context of time pressure and the need for quick reactions, regardless of our continuous knowledge sharing and skills learning, and our pair-programming and some pair-rotation:<br><br>&#8211; the size of the codebase,<br>&#8211; the number of applications,<br>&#8211; the complexity of the domains,<br>&#8211; the number of different technologies in the codebase<br><br>we felt at times that we were stretched too thin in terms of specialisation vs generalisation. Even if we avoided any catastrophic mistakes (the reliability of our delivery was pretty high) and we did pretty well, we felt each team could have done better given the opportunity to focus on one suite (trackside or production).<br>With Joseph Pelrine, to describe this situation, we came to the term &#8220;complexity budget&#8221;, which represents the idea of a maximum number of different programming languages, libraries, tools, codebase size, and business domain skills that a group of teams can handle effectively.<\/p>\n\n\n\n<p>In conclusion with Shared work, we experienced an extremely effective, frictionless and enjoyable cross-team collaboration, and we reached high levels of productivity in a fast-paced and high-pressure environment where most of the applications were mission-critical. We felt we were operating at the boundary where more product areas, on top of the Trackside suite and the Production suite, could have been formally defined also for the related support activities.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>The trade-offs between shared product codebase ownership and stream-aligned team codebase ownership<\/strong><\/h1>\n\n\n\n<p>Based on my personal experience, I have drafted some of the trade-offs that I have experienced between the shared product codebase ownership and team codebase ownership, in both cases for autonomous teams capable of completing end-to-end customer-centric features.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full is-resized\"><a href=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/trade-offs.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/trade-offs.png\" alt=\"\" class=\"wp-image-3028\" width=\"840\" height=\"497\" srcset=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/trade-offs.png 1800w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/trade-offs-600x355.png 600w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/trade-offs-768x455.png 768w, https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/trade-offs-1536x910.png 1536w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/a><figcaption>Click to expand<\/figcaption><\/figure><\/div>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Conclusions &amp; links<\/strong><\/h1>\n\n\n\n<p>Shared work has proven to be very effective, far beyond the point most believe it would stop working, and many Agile teams succeeded in adopting a shared work approach. Shared work can transcend painful cross-team dependencies in codebases with massive technical debt and therefore many accidental technical dependencies. It is very effective and helpful during the time needed to pay back the technical debt, separate concerns, and let the boundaries of the different domains and the APIs of different modules emerge. It also is the preferred option for new complex developments where the boundaries and the interfaces between the modules are still changing, evolving, and emerging.<\/p>\n\n\n\n<p>In shared work, as in Extreme Programming, there is a strong social component, synchronous collaboration, team discipline and technical mastery. For those who like social collaborative learning, shared work makes it completely frictionless and enjoyable.<\/p>\n\n\n\n<p>For those that experienced the pain of the failed recipes for scaling agile, shared work is the closest option to Chet Hendrickson\u2019s view on the topic:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><em>Since Agile is simple, a scaled version of Agile should also be that simple, or even simpler. Otherwise, it will no longer be Agile.<\/em><\/p>\n\n\n\n<p>Even when shared work reduces the immediate impact of technical dependencies, technical excellence remains fundamental to make the codebase easy to learn and understand and to avoid exponential growth of the effort required to change or add functionalities. Teams should always start by cleaning up any mess and keep things clean thereafter.<\/p>\n\n\n\n<p class=\"has-text-align-center\"><em>You cannot be agile if you\u2019re fighting your code and architecture to make every small change<\/em>&nbsp;\u2013 Allen Holub<\/p>\n\n\n\n<p><span style=\"text-decoration: underline;\">Links<\/span><\/p>\n\n\n\n<p>Here are a few useful links:<br>&#8211; Feature Teams Primer: <a href=\"https:\/\/featureteams.org\/\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/featureteams.org\/<\/a><br>&#8211; Collective code ownership: <a href=\"https:\/\/www.agilealliance.org\/glossary\/collective-ownership\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/www.agilealliance.org\/glossary\/collective-ownership<\/a><br>&#8211; Feature Teams structure: <a href=\"https:\/\/less.works\/less\/structure\/feature-teams\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/less.works\/less\/structure\/feature-teams&nbsp;<\/a><br>&#8211; Feature Team Adoption Map: <a href=\"https:\/\/less.works\/less\/adoption\/feature-team-adoption_map\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/less.works\/less\/adoption\/feature-team-adoption_map<\/a>&nbsp;<br>&#8211; Technical excellence: <a href=\"https:\/\/less.works\/less\/technical-excellence\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/less.works\/less\/technical-excellence<\/a><\/p>\n\n\n\n<hr class=\"wp-block-separator is-style-wide\"\/>\n\n\n\n<p class=\"has-text-align-center\"><meta charset=\"utf-8\"><strong><a href=\"https:\/\/www.smharter.com\/blog\/2022\/11\/21\/transcending-agile-cross-team-collaboration-with-shared-work\/2\/\/\">&lt;&lt; Part 2<\/a><\/strong>  (Part 3)<\/p>\n\n\n\n<hr class=\"wp-block-separator\"\/>\n\n\n\n<div style=\"height:131px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\">\n\n<img loading=\"lazy\" decoding=\"async\" width=\"420\" height=\"397\" src=\"https:\/\/www.smharter.com\/blog\/wp-content\/uploads\/turbocharge.png\" alt=\"\" class=\"wp-image-1974\"><\/figure>\n\n\n\n<p><\/p>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<div class=\"text-ads\">\n\t<h3>Turbocharge your scaling initiative.<\/h3>\n\t<p>\n\t<br>\n\tSee how we can help.\n\t<br>\n\tYou, your team, your organisation.\n\t<br><br>\n\t<\/p>\n\n\t<div class=\"local-scroll\">\n\t\t<a href=\"\/coaching.html#one_session\" target=\"_blank\" class=\" btn elastic-btn-mod btn-mod btn-dark btn-medium btn-round\" onclick=\"ga('send','event','Blog scaling-ads','Click one_session button','Virtual Mentoring');\" rel=\"noopener noreferrer\">\n\t\tVirtual Mentoring\n\t\t<\/a> \n\n\n\t\t<a href=\"\/coaching.html#coaching_as_a_service\" target=\"_blank\" class=\"btn elastic-btn-mod btn-mod btn-dark btn-medium btn-round\" onclick=\"ga('send','event','Blog scaling-ads','Click coaching_as_a_service button','Virtual Coaching As a Service');\" rel=\"noopener noreferrer\">\n\t\tVirtual Coaching As a Service \n\t\t<\/a>\n\t<\/div>\n<\/div>\n\n\n\n<p><\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Is there a valid alternative to Agile cross-team collaboration, one of the most consequential topics for successfully adopting Agile beyond one team? Should we tackle Agile cross-team collaboration challenges or transcend them? <\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,2],"tags":[],"class_list":["post-3016","post","type-post","status-publish","format-standard","hentry","category-lean-agile","category-software-development"],"_links":{"self":[{"href":"https:\/\/www.smharter.com\/blog\/wp-json\/wp\/v2\/posts\/3016","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.smharter.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.smharter.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.smharter.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.smharter.com\/blog\/wp-json\/wp\/v2\/comments?post=3016"}],"version-history":[{"count":20,"href":"https:\/\/www.smharter.com\/blog\/wp-json\/wp\/v2\/posts\/3016\/revisions"}],"predecessor-version":[{"id":3076,"href":"https:\/\/www.smharter.com\/blog\/wp-json\/wp\/v2\/posts\/3016\/revisions\/3076"}],"wp:attachment":[{"href":"https:\/\/www.smharter.com\/blog\/wp-json\/wp\/v2\/media?parent=3016"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.smharter.com\/blog\/wp-json\/wp\/v2\/categories?post=3016"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.smharter.com\/blog\/wp-json\/wp\/v2\/tags?post=3016"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}