Monday, April 18, 2022

Dependency Management in Agile Development

By Heeman Lee, Republished with permission.

Dependencies 

Dependency is anything that must happen to complete Product Increment but cannot be done by the Scrum team alone. When an organization adopts Scrum, dependencies surface. It’s not that they didn’t exist before, but they are more exposed under Scrum practice. As you scale your Scrum teams, the dependencies scale as well. Perhaps you have adopted Scrum framework, but you are not yet fully structured to support cross-functional teams. Maybe your product or system has a strong reliance on vendors or specialists from day-one. Or it has grown to a large-scale system. Any changes require some level of dependencies. Whatever the reason is, the reality is, we created dependencies and they don’t go away easy unless we take action. 

Why dependencies exist 

There are three major reasons why software development teams struggle with dependencies: 

1. Lack of cross-functional skills in teams 

2. Overly complex architecture 

3. Component based organizational team design 

While cross-functional teams are the essence of Scrum, it might take a long time for the organization to evolve. Teams don’t become cross-functional overnight. Leaders’ support combined with team members’ willingness to learn builds cross-functional teams over time. Working through dependencies is one of the best ways to nurture teams into cross-functional teams. It’s rarely the case that you formed a perfectly cross-functional Scrum team that has no dependencies. Any Scrum team determined to relentlessly identify and resolve dependencies ends up building necessary skills to be independent. Through the process of seeing dependencies and making ruthless effort to mitigate and eliminate them, Scrum teams grow skills and structure as cross-functional, self-organizing teams. 

As Scrum teams work through dependencies, it will expose the need to simplify the architecture and reduce the number of components. It will also necessitate organizational design change as the senior leadership assists teams to find better ways to resolve dependencies. It will, in turn, make it easy to form additional cross-functional, cross-component teams. 

Building small but strong, functioning Scrum teams is crucial. Cross-functional, self-organizing teams will decouple dependencies. A well-built Scrum team will coordinate and communicate to identify and eliminate dependencies. They continuously expand collaboration networks and their skills to increase autonomy. 

As dependencies surface, the organization leaders must put the heavy and high-risk dependent work items to top of the Product Backlog. Make dependencies visible and tackle them first at the organization level. In turn, recursively address the product backlog items that are dependent on 3rd party teams so that they are segregated and addressed at the early phase of Scrum adoption. 

Maturing through Dependencies

Over the course of Agile journey, organizations likely see this pattern of dealing with dependencies. 

Figure 1 Progression team maturity with dependencies 

In the early stage of Agile, a team carries over sprint backlogs over multiple sprints while waiting for the other team to address dependencies. Only few people have control and permission on code changes, and most code bases are tightly coupled. Team velocity is inconsistent, and the team members are frustrated. 

As the team matures, they identify any external dependencies during backlog refinement. They split the product backlog item with external dependencies and bring the consecutive item back into the backlog to complete later time. Or teams invite guest team members to work with them to complete the story during the sprint. Team members learn from the guest member and start developing the skill. However, they still struggle with tight coupling of code base and permission/authority to review the code. 

With leaders and managers enabling the teams, they will start focusing and take time to cross-train to own more of the work for themselves, growing to become cross-functional. With that, they can resolve dependencies in their domain of work and address related complexities in architecture. In order to do that, the leaders make sure the team is given authority and permission to make changes. 

With this trend, the team gets empowered. They become more and more cross-functional. They will have people and skills needed to finish their work. They will be better at seeing the open dependencies and won’t take in the work with dependencies into sprint. At the same time, they are capable of learning new skills to resolve other complexities and dependencies. Also, they create a network of collaboration with other teams with different expertise. Team members enjoy the new challenge that comes with stories. Team’s skill expands and continues to grow as a cross-functional team. Dependencies will not scare or frustrate the team. Another benefit from this is that the code base is quite decoupled and other than critical permission and control, the teams are given authority to make changes. 

Ability to mitigate or even eliminate dependencies lies in empowering people and enabling the development flow. 

In the short term, collaboration is key. For a longer-term, more empowerment is the way. Boldly consider cross-training, opening up permissions and organizational design changes. It takes effort from everyone to see successes in the whole organization. 

With a large organization scaling Agile methodology, the first step is to identify the teams that need to coordinate and form a team of teams (Scrum of Scrums in SAFe, or MetaScrum in S@S). The Product Owners gather regularly to visualize the dependencies and honestly review and prioritize the product backlog items by the value and impact. All the dependencies must be made visible and evaluated against other demands. Make sure to involve the decision-making stakeholders so they resolve impediments and the team can focus on solutions. 

As teams mature, they should seek the way to cross-train each other to make each team as autonomous as possible. They also build skills to make the team of teams a cross-functional team as a whole. 

Eliminating Dependencies

The dependencies issue could be solved in two ways. Short-term quick fixes or fundamental long-term solutions. 

Short Term Plan 

The quick fix is to visualize the dependencies and control the work order. For example, using a specialized tool like Jira to visualize dependency maps, you can reorder product backlogs and plan dependent items for later Sprints. 

Figure 2. Jira dependencies map 

It somehow helps teams to survive and continue the development progress. However, beware; the visualization and dependency management may become a critical process and special role instead of being a pathway to eliminating dependencies. 

Long Term Plan 

The fundamental solution is to eliminate the underlying issues of dependency completely by: 

● cross-training people 

● making the architecture simpler, reducing the number of components 

● changing organizational design and forming cross-component cross-functional Scrum Teams 

The bad news is that a strong culture of “managing dependencies” will hinder the implementation of the fundamental solutions. 

The more dependencies, the less agile organization becomes. Creating additional roles and using dependencies management practices do not eliminate the fundamental dependency issues.

In order to eliminate dependencies, the role of executive leadership is crucial. No one else in the organization is uniquely positioned to make system-wide changes that can free up resources and remove constraints. They can enable flow and empower the people. Enablement focuses on the act of assisting; removing constraints, changing systems to make development flow better. Empowerment is granting of power so that individuals or teams can make autonomous decisions; clear product vision and strategy, shared common goals and having easy access to the needed resources to make decisions. 

How to enable flow? Conduct value stream mapping5to find out waste and delays in the development process. The goal is to build your organization to rational value streams and a sustainable team with decreasing external dependencies outside the value stream. To empower people, the leadership must build a culture of empowerment. In lean organization, people who add value are the center of the organization. They are empowered. Such an organization's cultural norm is empowering teams to give them autonomy. By empowering individuals and teams, you decentralize the decision-making point and lessen the constraints and dependencies. 

Developing the habit of checking for dependencies during Backlog Refinement and Sprint Planning is a great way to detect and mitigate dependencies. In addition, continuous integration (CI) powered by automated continuous testing accelerates identifying dependencies. No matter how mature the Scrum team becomes, not all dependencies are discovered through Backlog Refinement. Automated processes can greatly help detecting the hidden dependencies that can only be revealed as a product is developed. 


1 comment:

  1. I have to admit that I really like the way how the topic is summarised. It simply explains what is the benefit of cross-functionality leading to the real autonomy without the delays in flow. I wish I am having something to argue about here, but all I may is to sign for this.

    ReplyDelete