Aggressive Decoupling of Scrum Teams
What does aggressive decoupling look like?
Last post I talked about the failure modes of Scrum and SAFe and how the inability to encapsulate the entire value stream will inevitably result in dependencies that will kill your agile organization.
But Mike… as some level of scale, you have to have dependencies? Even if we are able to form complete cross-functional feature teams, we may still have features which have to be coordinated across teams or at least technology dependencies which make it tough to be fully independent.
But Mike… you talk about having teams formed around both features and components… in this case, it is inevitable that you are going to have dependencies between front end and back end systems. Whatever we build on the front end, has to be supported on the back end.
What if…
What if you looked at each component, or service, or business capability as a product in and of itself. What if that product had a product owner guiding it as if it were a standalone product in its own right?
What if you looked at each feature that might possibly need to consume a component, or service, or business capability as the customer of said service who had to convince the service to build on it’s behalf?
What if the component, service, or business capability team looked at each of the feature teams as their customer, and had the freedom to evolve it’s product independently to best satisfy the needs of all it’s customers?
What if the feature teams could only commit to market based on services that already existed in the services layer, and could never force services teams to commit based on a predetermined schedule?
What if feature teams could *maybe* commit to market based on services which were on the services teams near term roadmap, but did so at their own risk, with no guarantees from the service owner?
What if feature teams were not allowed to commit to market based on services that didn’t exist in the service, nor were on the near term roadmap, eliminating the ability to inject features to the service?
I think…
I think you’d have a collection of Scrum teams… some Scrum teams that were built around features and some Scrum teams that were built around shared services and components… each being treated as it’s own independent product building on it’s own cadence under the guidance of it’s own PO.
There would be no coordination between the feature teams and the services teams because each set of teams would be evolving independently, but with a general awareness of each others needs. The services teams develop service features to best satisfy the collective needs of their feature team customers.
So…
I’m not suggesting this something that most companies can go do today. There is some seriously intentional decoupling of value streams, technical architecture, business process, and org structure that has to happen before this model would could be fully operational.
That said, if you want to have a fully agile, object oriented, value stream encapsulated organization, this is what it looks like. You not only have to organize around objects (features, services, components, business capabilities), but you have to decouple the dependencies and let them evolve independently.
The problems ALWAYS come in when you allow the front end to inject dependencies into the back end shared services. You will inevitably will create bottlenecks that have to be managed across the software development ecosystem. Dependencies are bad, bottlenecks might be worse.
If we can create Scrum teams around business objects, work to progressively decouple these business objects from each other, and allow the systems to only consume what’s in place now, and never allow the teams to dictate dependencies between each other… I think you have a shot.
Do this, and you really have agile at scale.
Comments (4)
jnm2
Title is misspelled. (Doesn’t match first sentence.)
Oops. Thanks!
Paul Phillips
Sounds a lot like the spotify squad model! http://labs.spotify.com/2014/03/27/spotify-engineering-culture-part-1/
Brian
This is Ivar Jacobson’s model that he wrote about in “Object Oriented Software Engineering”. It’s the model I’ve been trying to get to for ages. It lays over well in SOA and now you’ve shown how it can lay over in Agile. Application teams and component teams. The idea being application teams assemble applications from components that are built by the component teams. Some of the discussion we’ve had when thinking about this approach is around adopting a shared service model (component teams are gatekeepers of code in components – one version for all) or open source model – where each application team can take and maintain the components they use in their applications – then apply updates as they see fit.
We were very close to going this route before some changes here and we ended up going down the product team route, with teams grouped by application platform and having total ownership of their products. In this model, we struggle with the shared components.