Many organizations do not have the efficiency that is possible to achieve. There are several factors causing this that must be dealt with:
- Manage the work hitting the teams
- Unplanned work
- Some people and/or teams are constraints
- Poor collaboration across teams
- Improve the ecosystem that the teams are in
- High technical debt making change difficult
Implementation is not a separate step from deciding what to work on and refining our backlogs. All of the steps work in an integrated, tightly knit fashion to create feedback throughout the process. However, there are aspects of implementation that can be discussed separately.
Managing the Work Hitting the Teams
This is perhaps the biggest and most effective way to improve team efficiency – stop overloading them. A focus on working on the most important chunks of business value with a focus on finishing can help significantly.
Solution for Unplanned Work
There are three main types of unplanned work hitting the teams:
- Work requested outside of our normal planning event usually by an executive
- Work created because of interruptions caused by requests above or due to too much WIP
- Work resulting from technical debt – that is, what appeared simple turns out to be much more complicated
Unplanned Requests for New Work
It is, of course, simple to say “just don’t do this.” But the reality is much harder. Developers have a difficult time saying no to an executive (it’s what we call “a career limiting move.” In any event, unplanned work of this type sometimes has more value than the damage it causes (e.g., a potentially large client can be obtained). There are two main steps to solve this:
- Create visibility on unplanned work. If the work is requested, mark these stories as ‘unplanned’ so it is possible to track how much of the work is of this type.
- Diminish the impact of the unplanned work. Make the people who are initiating the unplanned work aware of the cost and have them agree to inject this work at a particular cadence (e.g., an iteration boundary). This can allow the development team to be prepared for it. Development teams should also manage their WIP even if they are doing iterations so as to be nearly complete at any stage.
Solution for Having Constraints
Constraints are a reality and cause many interruptions sourced within the technology side. It’s easy to say “have cross-functional teams” but the reality is that it is often not only difficult to do so, it may not even be financially viable. Highly skilled people are often difficult to find and or train. Sometimes it’s not skill, but experience such as being a subject-matter expert or having been around when the code was written 10 years or more ago. We need to recognize that the way these people work must be different than the way others work in order to be efficient. The most effective way to do this is to have these people and/or teams have their own kanban boards so that we can both focus them on the work only they can do as well as make their delays/constraints visible. This will enable those dependent upon them to plan better.
Poor Collaboration Between Teams
There are four main solutions for improving the coordination between teams:
- Create visibility so all of the teams can be aware of what other teams are doing and how they are impacting them.
- Have a common cadence across teams. For example, every team works on one or two week cadences with a common start date.
- Have a regular planning event across teams driven with the aim of working together to implement MBIs.
- Have shared backlogs when more than one team is required to implement an MBI and the teams are all working on the same MBI.
Improve the Ecosystem that the Teams are in
The manner in which teams are organized around their value streams has a huge impact on the quality of their work.
Organizing our people. The ideal case is to have cross-functional feature teams. That is, teams that can build features on their own, without being dependent on others. This, however, is virtually impossible once an organization has gone beyond 100 people. Nevertheless, we want to strive for this as much as possible. There are many ways to have people collaborate together better. Sometimes it’s merely have core teams that “borrow” a member of another team.
We don’t need to necessarily do a re-org of our company to achieve this, but rather look how people should be collaborating. It is important to match our collaboration methods with our value stream as much as possible. Doing this typically requires making all work visible (see section Creating Visibility above). Once we see how people are currently working together and how work is going back and for the between them, we can better see how folks should collaborate.