This is a story about our team’s journey from schoolbook Scrum to Kanban development flow. Everything written here has actually happened. One could say that this is our #NoEstimates approach, but I tend to shy away from that term. I like to think this is more like a story of continuous improvement that has been influenced by many discussions under the #NoEstimates hashtag. For those conversations I’m very grateful.
- This is an internal multi-year product development program. We are building a product that is installed to customer premises containing both hardware and software. The life cycle of the system will be decades.
- Team funded for nn months. Unfortunately I don’t know how the team size and the length of the funding was decided. I haven’t seen any detailed work breakdown structures or bottom-up estimates, though.
- Distributed development. Half of the team and the PO in another country, time difference 7 hours.
We started the development with a co-located kickoff week. One of the days was “process day”. Managers left the room with message “you decide how you want to work”. This is what we decided after the initial confusion:
- Scrum was chosen as process framework
- Decided to go with one team approach instead of having two co-located teams
- Two Scrum Masters, one in each location
- Common daily using video conferencing
- Two week sprints
- One hour weekly grooming session
- Retrospective after each sprint
- Planning split into two 2h meetings due to time difference. Between plannings story sub-tasking in pairs.
- Definition of Done defined
After the kickoff week we had one week preliminary “sprint 0”. That week was used to set up version control, getting bean bag chairs, video conferencing TV etc. We also had three planning sessions. In one of those we chose a baseline story for estimation. The heuristic was “this feels like medium sized story”, and it was given 8 story points.
After sprint 0 we started working in the way we agreed in the kickoff week. Process improvements were discussed and decided in retrospectives. Here are some of the things we changed during the first sprints:
- We noticed we didn’t have agreed way to add more work to sprint if we run out of work. –> We decided that we would have a mini-grooming session with minimum of 2 persons to add more work.
- Due to time difference, other location would have to wait until afternoon to find out what other location did the previous day. –> Decided to use email dailies instead
- Grooming sessions were painful. Decided to try sub-team groomings. Noticed that things would anyway need to be discussed with the whole team, so changed back to whole-team approach.
- Planning 2 would only be held if needed. No need to review the sub-tasks with the whole team.
Our early estimating approach
We used planning poker to estimate our stories. Usually the estimation process went like this: lengthy discussion -> “are we ready to estimate?” -> playing poker using online tool. Here’s what happened after the poker:
- 5-5-5-5-8-8-8-8 -> pick higher
- 3-5-5-5-3-8-8-8 -> small discussion, pick higher or settle with average
- 1-3-2-8-13-1-2 -> Whoa! More disucssion and then new game.
Moving away from planning poker
Soon we started to notice our stories were almost every time 3 or 5 points, sometimes 8. An idea came that “what if we just stop playing the poker and agree that it’s 5 points”. Or just count the number. That’s what we did, and amazingly enough that didn’t change anything. Instead of committing to 50 story points we just committed to 10 stories.
From Scrum to Kanban
Working with distributed team with longish time difference made the Scrum start-stop cadence quite large part of the 2 week sprint: demo on Thursday, retro on Friday, planning part 1 on Monday and part 2 on Tuesday. From 10 day sprint that’s actually 40% of the days!
What happened was that we unofficially already worked on items even though they weren’t “accepted” and “committed” to a sprint. We kind of anticipated what was coming next and already started working on it. So, we decided to make it official and move to Kanban. Here’s what we did:
- Dropped the phased planning meetings
- Kept the weekly planning/grooming meeting. Main idea was that stories would be groomed to ready to dev in these meetings.
- Kept recurring retrospectives
- Setup the kanban board to Jira, columns were setup in the same way that we already worked in Scrum (ready to dev – in dev – in review – testing – ready to demo – done)
- Write up kanban policies for the team and rules how tickets move in the flow
Not estimating stories anymore
First column in our kanban board is ready to dev. This means a ticket has been discussed with a team and any developer can grab the ticket and start working on it.
Our entry criteria for story to be accepted to ready to dev is that minimum two team member accepts it. Our heuristic is “can we make it simpler?”. If answer to that question is “yes”, then we try to peel the story simpler. We also try to prefer vertical stories over horizontal tasks.
Currently, using this approach, our median cycle time is little over 6 days, and mean time 8 days. Cycle time for us is the time that starts when developer starts working on a ticket and stops when it’s ready to be demonstrated.
Changes along the way
Along the way we’ve fine-tuned the process bit by bit. Here are some of the improvements we’ve tried along the way:
- When we switched from Scrum to Kanban, first we tried triggering demonstrations on demand (i.e. when ready to demo column reaches certain amount of tickets). Pretty soon we switched back to regular demo cadence, it seemed to fit stakeholders better.
- Adding queue columns to the flow, like “waiting for testing”.
- Adjusting our WIP limits in the flow
- Adjusting where to test and when are branches merged to master
- Decided not to talk about implementation details in demos
As I’m writing this I feel we’ve reached a certain plateau. We have a nice flow and even though we make small adjustments to it, we haven’t changed the way we work drastically in the past few months. In a way that worries me.
But wait, we still estimate…
Our team’s high level goal is to get 1.0 out of the oven by the end of the year. Our PO has defined a desired set of features that he would like to have in the 1.0. We have fixed time and fixed cost, so the question has been “are we able to produce enough scope that would make a meaningful marketable 1.0?”
To answer that question, I’ve used our throughput data to produce a forecast. One problem has been — because we groom our stories just in time — we don’t really know how many dev-sized stories does the rest of the backlog contain. To address that, I have simply estimated how many tickets do each of the higher level features in backlog consist of. I have phrased my answer like “based on our current speed, it seems likely that we will reach that scope by XX”.
I have also had an idea to gather throughput metrics for the higher level features, and then use that data to forecast. I haven’t done that (yet) though. The problem with that approach is that the sample size is really small.
Trying to tackle personal biases
This is a true story, but on the other hand it’s my true story. I’m fully aware that my brain is adjusting this story. I remember what I want to remember and I’m putting pieces together to make a more coherent story. I don’t do it consciously, it just happens in my brain. To compensate for that bias, I try to list some of the thing that haven’t gone like they do in books usually:
- We’ve had a “8 story points” ticket that took 6 months to get done.
- When forecasting future performance, I’ve ignored dependencies and technical impacts. I’ve just assumed future work is just a big mass of tickets waiting to be chewed.
- Grooming sessions are sometimes very painful and confusing.
- We don’t explicitly ask “can we make this simpler?” out loud that often anymore. But I guess we’ve grown into it; cycle times haven’t been growing.
- We have defined WIP limits to each kanban column, but they’re more like soft limits.
- We have quite a few horizontal technical tasks and the ideal of just implementing vertical slices is quite far away
- Our standard deviation for ticket cycle times is quite high. I don’t know if it’s too high to make any kind of forecasts about the future performance.
- I use kanban and Kanban interchangeably, don’t really remember what was the difference and too lazy to check it up. =P
So that’s my story. What’s yours? Would you like to hear something more? I’m pretty sure I’m forgetting to mention something.