Code is cheap; ignorance is costly
In the past few weeks I've seen two different responses to team interdependencies in software products. I like one much more than I like the other
On initiative A, the team learned that a "strategic" solution to their needs would not be ready in the required timescales
So they asked developers to build a manual workaround to see them through the gap. The architecture isn't pretty. It's not what anyone would have wanted. But it works. Users are getting a service
What's more, the team are learning loads from the experience of running the manual service, and are able to feed the insights from that into delivery of the strategic solution
When it does arrive, the strategic service will be based less on guesswork, and more on learning that can only be gained by having a live service in contact with real users and real data at scale
Meanwhile on initiative B, the team is being asked to wait for another team that has a similar "strategic" solution on their future roadmap
While they wait, the team will be disempowered. Their users are getting no value, and worse, the team are not learning anything about the real user needs
This seems so wrong. It rests on a misunderstanding of scarcity and costs in digital service delivery. Here's the thing: code is cheap; ignorance is costly
Agile teams don't accept and manage dependencies, they work actively to eliminate them. In particular, they should never accept a dependency on something that doesn't exist yet
Any "target future state" is merely that, a target, until it is performing in the world - in the words of the Internet Engineering Task Force - as rough consensus and running code
The agile way is not to wait. Build alphas and betas. Deliver value to users sooner. When the time comes to throw away that code in favour of something better, value all the learning we gained in the time it was live