A few years ago I worked with a product team who were keen to try using a pull model for their work.
The idea is that instead of a product manager or tech lead pushing tasks to individuals, each team member has the autonomy to pull a task when they are ready to pick something up.
The product manager should already be working on a prioritised backlog, with the highest priority items at the top of the list.
When a team member is available to pick up a task, they take the item from the top of the list, assign it to themselves, and move it to “in progress”.
Also, when the card is ready to move to the next column, the team member marks the card as “Ready”. Depending on the column, someone else in the team then pulls the card into the next column.
Why the Ready field is useful
Having items marked as “Ready” makes it really easy to see the status of every card on the board, but without moving it to the next status.
Without this, you wouldn’t know if a card is ready to be pulled to the next column. So you’d need to rely on the assigned person pushing it into the next column – or ask them if it’s ready to move. Which is easy enough to do – but the team can run smoother than that. More on this in a future post.
A practical tip: pulling a card into a new column should clear the Ready field, otherwise it’ll look like it’s Ready without doing anything.
How to avoid a queue of cards
To avoid columns on the board filling up too much, the team uses a WIP (work in progress) limit for each column – typically this is equal to or less than the number of people in the team.
So for a 5 person team, you might have 5 items in progress. When one item is marked as “Ready”, it has to be pulled to the next column before a new item can be started.
It’s possible to have a queue of cards marked as “Ready” that prevents new cards from being pulled into “In progress”. The solution is for the team to start pulling cards into other columns, which keeps things moving.
The right side of the board
This highlights the importance of focusing on the right side of the board. If every column after “In progress” is full, the only option is to go to the final column and start clearing it. Cards in the last column require the least effort to get to “Done”, when the value can be realised. After that, you move to the next column and clear that.
Even if every column is full, you can still mark items as “Ready” to show that they can be moved along when there’s sufficient space to do so.
In the above example, the green “Ready” label shows a card that can be pulled into the next column. The “Code review” column is yellow because it has a limit of 2 cards, and a 3rd card has been pulled in. The “In progress” column is also at its maximum of 3 cards.
A team member wants to pick up Task 7.
- Task 1 is Ready, so can be easily pulled in QA.
- However, Code review has a limit of 2, so we actually need to free up 2 spaces. We need to complete the code review process on Task 2 or Task 3, mark the card as Ready, and pull it into QA.
- That frees up space for Task 4 or Task 5 to be pulled into Code review.
- Finally, Task 7 can be pulled into In progress.
If this feels like a lot of steps, remember that every one of these steps brings each card closer to Done. Until a card is Done, it can’t add any value to the product.
So instead of thinking “what else can I start working on”, the mindset shifts to “what can I move closer to Done”.
Pulling, rather than pushing, is quite a different approach to pick up. But give it a try, and it can be quite freeing. Pushing to the next column can quickly lead to a “set and forget” approach where each column becomes someone else’s problem. Pulling allows the team to take ownership of the board and its tasks, and collaborate on moving more tasks to Done.