What are Dependencies?
I’ve been running around lately telling people that the presence of dependencies break Agile. Just for the record, I want to explain what I mean when I talk about dependencies. Agile in general, Scrum specifically, is predicated on the idea that the team has everything it needs to deliver an increment of value. When the team does not have everything it needs to deliver an increment of value we have a dependency.
Dependencies come in many forms. One of the most common is when the team needs some skill set that doesn’t live on the team. The classic example is the DBA that is shared across several teams or when QA is not part of the core Scrum team. Less obvious dependencies come about when the PO doesn’t have full discretion to make trade off decisions or when we have a UAT phase at the end delivery.
Why Dependencies Matter?
Dependencies matter because the secret to great team based Agile is the accountability the team has to get done at the end of the sprint. If the team can’t get to done at the end of the sprint, or someone can undo done after the sprint is completed, it dilutes accountability and gives us an excuse not to deliver what we say we are going to deliver. It makes done beyond our control. It makes getting stable velocity beyond our control… it makes getting better beyond our control.
Sometimes teams will try to forcefully break dependencies by ’empowering’ a PO that the organization doesn’t really view as empowered. Sometimes we’ll try to forcefully break dependencies by defining done in a way that the team is in control of what get’s delivered. That is fine from a team perspective, but doesn’t really solve the real problem of negative feedback loops and deliverables that aren’t ready to go into production.
Dependencies are Reality
But here’s the deal. Dependencies are real. Dependencies are especially real when we start dealing with Agile at scale. At scale we are not only talking about dependencies between the team and external entities, but between teams that need each other to deliver an end-to-end increment of working software. Our default thinking should be to reduce dependencies. A well thought out Transformation strategy can help break many dependencies but we have to aggressively manage those that remain.
How we choose to manage dependencies makes all the difference to how we achieve real end-to-end business Agility. If we implement Agile teams but deal with dependencies through big up front release planning, we might not be any better off than with traditional project management approaches. Is there any difference between a Gantt chart and a multi-team backlog that is pre-sequenced sprint-to-sprint for the next several months? Here’s a hint, I can use Microsoft Project to model both.
Manage Constraints Rather than Dependencies
Agile at scale is typically described structurally as a hierarchy of teams that are loosely coupled from each other. Every team, at every level of the hierarchy, is an independent entity were velocity flows from the lower level teams to the higher level teams-of-teams. When we have dependencies between teams, this model breaks. The solution lies in the application of Lean Thinking and the Theory of Constraints, not at the team level, but across teams… both inside and outside of core product development.
The solution lies in the application of Kanban to model the flow of value across teams, to make smaller investment decisions at the portfolio level, to limit the amount of work in process, and to redeploy people and teams in ways where everyone all the time, is focusing on the highest value initiatives within the organization. We use Agile at the team level to inspect and adapt and to make sure we are always focusing on delivering the most value possible in any given sprint. Using Lean and Kanban and TOC gives us that same ability when we are dealing with dependencies at any level of the organization.
Speaking at the PMI Global Congress
This is basically the subject of my talk at the PMI Global Congress tomorrow. If you happen to be at the Congress, I’d love to have you stop by. If you want an explanation of how to tactically manage through this kind of portfolio structure, check out this video I did a few months ago. I think it will help. Past that, if you are struggling adopting agile, chances are you have a dependency problem. Consider your current strategy for dealing with dependencies and if this kind of a model might help.
I bet it will.