Having specialized as a UI developer and occasional Scrum master over the past 10 years, here’s what I’ve learned about external dependencies:
- They’re always late.
- They’re always buggy / different from what was expected.
- By the time the whole system is working end to end and people starting using it, we discover a fatal flaw in the design that leads to a lot of rework.
Okay, not always, but I like to be pleasantly surprised.
With that knowledge in mind, I’ve had a lot of success designing stories that anticipate these challenges.
First of all, it’s a user story. We focus on creating value for the user. Sometimes we discover that a lot of the value can be realized even if the dependency is never done. For example, with a little extra processing, maybe we can get the data from an existing API. Even if it’s slower and missing part of the data, something may be better than nothing. Even if we’re going to throw that work away, it generally pays off in terms of time to market and learning.
When that option is exhausted, we start working on stories that can’t be completed without dependencies. The definition of done has a provision that a prototype may stand in for the real dependency. The team has to do a bit of extra work to build a prototype that may not even be used, but it pays off. It gives us a head start in finding our own bugs and we can get a close approximation of the full working system in front of the user faster. We sometimes learn things that will affect what we need from the dependency, so that we can redirect the other team, spare them some rework, and get the end-to-end project done sooner.
Instead of tracking third party dependencies on the backlog, we do everything we can to keep moving forward with or without the dependency. If we get to the point that we’re truly stuck and can’t do anything without the real dependency being done, we look for the next story on the backlog that doesn’t have a dependency. When the dependency is ready, we create integration stories just-in-time.