The document discusses 12 strategies for managing dependencies between teams when developing software: 1) Develop self-serve capabilities to remove dependencies, 2) Move resources between teams temporarily to help complete dependent work, and 3) Use techniques like consumer-driven contracts and feature toggles to design dependencies out of the system architecture. It also recommends strategies like visualizing blockers, prioritizing dependent work, and investing in shared test environments. The overall goal is to reduce waste from waiting on dependencies and improve predictability of software delivery.
1. Dependency Management
12 Strategies for improving systemic flow
Introduction to Kanban
Lean Estimation, Tracking & Planning
Making Software Delivery more Predictable
12 Strategies for Managing Dependencies
Advanced Kanban – classes of service and backlog mgmt
3. 80% OF YOUR CAPACITY IS ABSORBED
IN WASTEFUL ACTIVITY
4. Develop self-serve capability
Develop self-serve capability within the team to remove the dependency (self-serve).
1. Develop self-serve capability
2. Systemic Swarming
3. Consumer Driven Contracts
4. Fake Objects, Mocks, or Stubs
5. Queue and wait
6. Planning & Scheduling
7. Visualise Blockers
8. Use Explicit Policies to Expedite
9. Avoid self-competing
10. Re-Architect
11. Invest in Env’s
5. Systemic Swarming
In a multi-kanban environment (multiple delivery streams / teams) move people with the
right skills between delivery streams to deliver the dependent requirements (so as to
respect the release cadence) before returning to their own delivery stream.
1. Develop self-serve capability
2. Systemic Swarming
3. Consumer Driven Contracts
4. Fake Objects, Mocks, or Stubs
5. Queue and wait
6. Planning & Scheduling
7. Visualise Blockers
8. Use Explicit Policies to Expedite
9. Avoid self-competing
10. Re-Architect
11. Invest in Env’s
6. Consumer Driven Contracts
Check out the article on Martin Fowlers blog where Ian Robinson discusses a Service
Evolution Pattern called Consumer Driven Contracts.
1. Develop self-serve capability
2. Systemic Swarming
3. Consumer Driven Contracts
4. Fake Objects, Mocks, or Stubs
5. Queue and wait
6. Planning & Scheduling
7. Visualise Blockers
8. Use Explicit Policies to Expedite
9. Avoid self-competing
10. Re-Architect
11. Invest in Env’s
7. Fake Objects, Mocks, or Stubs
Think carefully about the consequences of using these approaches from a testing
perspective.
1. Develop self-serve capability
2. Systemic Swarming
3. Consumer Driven Contracts
4. Fake Objects, Mocks, or Stubs
5. Queue and wait
6. Planning & Scheduling
7. Visualise Blockers
8. Use Explicit Policies to Expedite
9. Avoid self-competing
10. Re-Architect
11. Invest in Env’s
8. Queue and Wait
Move the Story out of flow whilst you wait for the dependent requirement to be fulfilled.
Once fulfilled return the Story to flow. This is shown in the “3rd party blocked” section in
the Dev column above.
1. Develop self-serve capability
2. Systemic Swarming
3. Consumer Driven Contracts
4. Fake Objects, Mocks, or Stubs
5. Queue and wait
6. Planning & Scheduling
7. Visualise Blockers
8. Use Explicit Policies to Expedite
9. Avoid self-competing
10. Re-Architect
11. Invest in Env’s
9. Planning & Scheduling
Schedule the various requirements to be complete in line with a plan (in my experience
the odds of success of this technique are similar to a seven horse accumulator!). BUT, you
do get value from flagging up known dependencies earlier in the backlog to help with
your selection policy.
1. Develop self-serve capability
2. Systemic Swarming
3. Consumer Driven Contracts
4. Fake Objects, Mocks, or Stubs
5. Queue and wait
6. Planning & Scheduling
7. Visualise Blockers
8. Use Explicit Policies to Expedite
9. Avoid self-competing
10. Re-Architect
11. Invest in Env’s
10. Visualise Blockers
If you uncover or stumble across a dependency during dev use blocker stickers to raise
the awareness then focus on unblocking.
1. Develop self-serve capability
2. Systemic Swarming
3. Consumer Driven Contracts
4. Fake Objects, Mocks, or Stubs
5. Queue and wait
6. Planning & Scheduling
7. Visualise Blockers
8. Use Explicit Policies to Expedite
9. Avoid self-competing
10. Re-Architect
11. Invest in Env’s
11. Use Explicit Policies to Expedite
Below you’ll see an External row in the backlog. Agree an org-wide policy that anything
arriving into this row is expedited or prioritised as part of the selection policy. Don’t use
this for shared service teams.
Incidents
Unplanned
Planned
Tech Debt
External
Breakdown
Establish a class of service
policy across all work streams
1. Develop self-serve capability
2. Systemic Swarming
3. Consumer Driven Contracts
4. Fake Objects, Mocks, or Stubs
5. Queue and wait
6. Planning & Scheduling
7. Visualise Blockers
8. Use Explicit Policies to Expedite
9. Avoid self-competing
10. Re-Architect
11. Invest in Env’s
12. Avoid Self-Competing
If you are dependent on a shared service team, make sure your tribal leader attends their
prioritisation / selection meeting because you may end up competing against yourself or
other squads within your tribe for what should be a tribe level prioritisation call.
Backlog Select WIP DONE
Squad A
Squad B
Squad C
Squad D
Tribe 2 Tribe 1
1. Develop self-serve capability
2. Systemic Swarming
3. Consumer Driven Contracts
4. Fake Objects, Mocks, or Stubs
5. Queue and wait
6. Planning & Scheduling
7. Visualise Blockers
8. Use Explicit Policies to Expedite
9. Avoid self-competing
10. Re-Architect
11. Invest in Env’s