In big complex agile projects Product Owners strive to avoid functional dependencies between the features. Dependencies can occur between the features that are being addressed by a single team and with different development teams working together for the same release or product. This is particularly true between the sub teams within a program. Mike Cottmeyer, CEO and Founder at LeadingAgile gave some solutions to manage dependencies between features in his recent blog.
Big products are just a series of small products that work together in an integrated fashion. Each of these smaller products ha a backlog, a team, and the team can produce a working, tested, increment of the product on regular intervals. There are tons of reasons that make this approach a great way to build software. Code ownership is less complex. Branching strategies simplify. We have a much smaller group of people interacting with the code base and business logic, etc. The downside of this approach is that you will probably have to coordinate requirements dependencies between teams and you will often introduce sequencing dependencies between sub-systems.
Roger Brown, Agile Coach at Agile Crossing, shares the problem of technical dependencies in his blog. He says that large-scale Agile development brings following challenges to dependency management.
- One person or team can not anticipate all dependencies
- Teams have conflicting priorities across their individual backlogs
- Scope is dynamic so dependency management is ongoing
- Team completion dates may not align
Mike shares a few strategies to manage dependencies between requirements as:
- Fully break dependencies between products and shared component. Products can only commit to features built on capabilities already present in the shared component. Products can request new capabilities from their component teams, but those requests go into the queue and get done when they get done.
- Minimize dependencies between products and shared components, products can only commit to capabilities that are on the near term roadmap of the component team.
- To manage dependencies between products and shared components, products inject capabilities into the component teams’ backlog and force a dependency. This is the most risky of all strategies, but could possibly be necessary in some circumstances. In this case, each team should have a stable backlog and a known velocity and be able to make and meet a commitment with a high level of confidence.
Scott Ambler, Senior Consulting Partner at Scott Ambler + Associates shared following strategies to address functional dependencies in his blog:
- Reprioritize one or both of the requirements.
- Mock out the missing functionality until it is available.
- Rework the requirements to remove the dependency.
Scott mentions techniques like physical dependency map, simple electronic tool, backlog management tools and requirement management tools for maintaining functional dependencies.