Skip to main content

Eliminate dependencies, don’t manage them

July 11, 2018

If you worked in large organizations you have probably heard about the term "dependencies". I am convinced that dependencies need to be eliminated, not managed. With a help of system diagrams in this article, I will uncover the main reasons why Scrum Teams suffer from dependencies, how they impact organizational agility, and what the fundamental solutions to this issue are.

How dependences inhibit Teams progress

The more dependencies, the less chances the feature will be done by the end of the Sprint. Thus, the more time it takes for the feature on average to go from Product Backlog queue to the market (cycle time). As a result, agility is reduced because the organization is unable to deliver potential value to the market quickly. This causes organizational stress.

A typical management response to organizational stress is "divide and conquer". For instance, if there is a problem with the quality, let's create a separate department “quality control” with set of its own KPIs. Creating new functions, units, component teams and coordination roles, managers strengthen the fragmentation of the organization. More fragmentation leads to even more dependencies.

dependencies_cycle_time

High average cycle time makes the organization less agile. But Scrum Teams should not have any dependencies!

Cross-functional teams have all competencies needed to accomplish the work without depending on others not part of the team. The team model in Scrum is designed to optimize flexibility, creativity, and productivity.

Scrum Guide 2017

Why dependencies exist

From my long experience working with large organizations I see a few reasons why the dependences thrive:

  • Imperfect organizational design based on component teams ( "bus team", "analytics team", "Android Team", “integration team”). It causes intensive fragmentation.

  • Incomplete cross-functionality (lack of one or more skills).

  • Unreasonable complicated architectural design ( f.e. "there are 256 systems in our organization"), which inhibits creation of cross-component and cross-functional Scrum Teams.

How to get rid of dependences

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

The quick fix is to visualize and manage the dependencies. E.g. creating additional coordination roles  or using specific techniques ("ropes on the boards"). Yes, it somehow helps to survive and continue the movement. You become an artist of the visualization and dependency management. Your work looks similar to this:

The fundamental solution is to eliminate the fundamental issues completely by:

  • training people

  • making the complicated architecture simpler, reducing the number of components

  • changing organizational design and forming cross-component cross-functional Scrum Teams (Feature Teams)

In this case the board for the scaled Scrum could look much better (no dependencies):

Feature Teams do not need the ropes because there are no dependencies or they are trivial.

Let’s get back to the system diagramming. On one hand, we have a cycle explaining the rise of dependencies, on the other hand it is a quick fix of the problem, then a fundamental solution cycle and the final cycle of forming a culture of managing dependencies when time passes.

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

why_dependencies_thrive

Key Ideas:

  1. The more dependencies the less agile organization becomes.

  2. Dependencies thrive because of the unnecessarily complex architecture, lack of skills, and suboptimal organizational design (component teams).

  3. Creating additional roles and using dependencies management practices do not eliminate the fundamental issues.

  4. Fundamental solutions are simplification of the architecture, Feature Teams and, training people.

Do you manage dependences or want to eliminate them?

Scrum ON!

 


What did you think about this post?

Comments (9)


mj4scrum
05:15 pm July 17, 2018

Great article. Thanks.


Jim
07:30 pm July 17, 2018

your list of dependencies is limited. Tech Debt and Legacy applications is a key area missed. It's a good practice to eliminate dependencies, but forget those silly strings. SAFE is a joke and will be laughed at in time. I write up my dependencies per team at the end of each planning and we have a combined dependency board per team. 7 months ago when I started we averaged 6-8 dependencies per team, now we have about 2-3 each sprint. We try to eliminate and have come along way, you have to get smart and learn how to break these! It's not as easy as one might think.


Илья
07:52 pm July 17, 2018

Jim, thanks for sharing your experience. I too ask the Teams to seek and highlight the dependencies by the end of the planning if there are any, anyway the long-term focus is on completely eliminating them. That's the perfection vision. Please help me understand what you mean by Debt and Legacy applications dependency.


Jim
05:55 pm July 18, 2018

sometimes Debt and Legacy could mean you have a monolithic application that is difficult for many developers to work on simultaneously, or simply the developers who built legacy created highly coupled code that causes a dependency on who can work on the code and when and how much lifting it takes to get those changes to Production. Example today I can push a microservices container for SSO from Dev to Prod in minutes with automation testing and CI/CD. To update one of the core Debt/Legacy applications it takes about a week of deployment activities and manual testing to ensure minimal changes were not causing wide spread problems. Does that make sense?


Илья
08:32 pm July 22, 2018

Thanks for clarification, that definitely makes sense for me, I guess it could under "Unreasonable complicated architectural design" category.


chloe.enjolras
10:40 am December 27, 2018

Hi Illia,
Thanks for your article.
Architectures are now mostly relying on microservices to build complex services. As products grow with more features, new micro-services are added to the system and more dependencies are created. If teams are responsible for a set of micro-services, features can still span several teams and dependencies among teams arise. If teams are responsible for complete features, they need to understand and be able to impact a lot of different microservices with different potentially technologies...
If we agree that monolith should be avoided, microservices create a lot of dependencies by themselves. Data management or data science is another source of dependencies as questions arise to use data from all domains, managed by different microservices to create value.
So I am not sure what you mean by "simplification of the architecture" in this context ? Could you elaborate ?

Thank you


Alan Larimer
02:17 am January 24, 2019

If these microservices are following the SOLID and RESTful principles, then dependencies should not be increasing in any significant way.


mj4scrum
03:10 pm September 12, 2019

Consider that "dependencies" in knowledge work are actually caused by knowledge gaps. https://seattlescrum.com/misconception-1-dependencies-are-caused-by-immutable-laws-of-physics/


mj4scrum
08:52 am May 22, 2021

While a microservices architecture is occasionally appropriate, most of the time it is a dubious choice. In either case, it doesn't eliminate the need for teams to collaborate with each other.

https://seattlescrum.com/misconception-4-will-parts-made-by-different-teams-fit-together-by-magic/#misconception-411-doesnt-xyz-technical-approach-eliminate-the-need-for-teams-to-work-together