Like many teams we adopted WIP limit. And like most of them we could see the benefits of this practice right away.
WIP stands for work in progress. Limiting WIP thus means limiting the number of items you work on at the same time within the team. When your team reaches the max number of items it can work on, it just stops starting new items.
By limiting the WIP we create slack. Which is exactly how I could finally introduce it in the team: “what if, when we reach the limit, we just did nothing?” Though it’s not as simple as this, fear of the void is the main issue to overcome when you want a team to adopt WIP limit: ultimately, when you reach the WIP limit, you stop working on the top priority items. Instead, you help to keep the items you started flowing towards their done doneness. But when you can’t help anymore, you just do nothing. Actually, the rules, when we reach the WIP limit, are:
- You don’t start any additional item.
- You help finishing started items.
- If nothing can be done, you can do whatever you want, as long as it can be interrupted anytime to work on the project’s priorities.
So we created slack. And, as often described, the benefits to slack are huge:
- Started items are done in a quicker way.
- As a consequence, there is less uncertainty.
- More reactivity.
- Less interruptions.
- Less WIP means less dependency issues within the team.
- We have a tendency to pair more. Thus more quality, more tests, more refactoring.
- More knowledge sharing because we help more each other.
- We facilitate more other team’s flow.
- We develop more tools that help us speeding up our flow.
Let’s look at the concrete stuff. We did it in a slightly different way than the academic way, or other teams on the project. Our flow is quite standard for a dev team.
Usually, you would have a WIP limit on Dev and Dev Done, and another one on Test. We tried something else. As we are a team of 4, we set a WIP limit of 3 around Dev, Dev Done, AND Test (actually it’s 2 backlog items + 1 bug at least major, but it doesn’t matter here).
We did this for several reasons:
- As we have no dedicated tester in the project, we often test our backlog items ourselves.
- When a backlog item is rejected in test, it goes back to dev directly.
A WIP limit works because it’s applied to a production unit: a team. It’s normal to apply the WIP limit to everything the team covers. And even when testing isn’t in our scope, we are still supposed to take it into account, as the item being tested can still come back to dev. Testing doesn’t always answer yes. Kanban comes from manufacturing. In manufacturing, when an item isn’t valid, it is usually dumped, or sent to a specialized team. In our case, when an item isn’t valid, it consumes a slot to the dev team that produced it.
After a couple of iterations with this rule, I can confirm that the fear of the void is still the main impediment to overcome. We are cheating the WIP limit here and there, especially when managing bugs. We are still tweaking the WIP limit in order to make it fully functional.
I’ll keep you posted when I have some significant news. In the mean time, if you have any experience to share, please feel free to help.