Agilist, Heal Thyself!
- by Dylan Smith
I’ve been meaning to blog about a great experience I had earlier in the year at Prairie Dev Con Calgary. Myself and Steve Rogalsky did a session that we called “Agilist, Heal Thyself!”. We used a format that was new to me, but that Steve had seen used at another conference. What we did was start by asking the audience to give us a list of challenges they had had when adopting agile. We wrote them all down, then had everybody vote on the most interesting ones. Then we split into two groups, and each group was assigned one of the agile challenges. We had 20 minutes to discuss the challenge, and suggest solutions or approaches to improve things. At the end of the 20 minutes, each of the groups gave a brief summary of their discussion and learning's, then we mixed up the groups and repeated with another 2 challenges. The 2 groups I was part of had some really interesting discussions, and suggestions: Unfinished Stories at the end of Sprints The first agile challenge we tackled, was something that every single Scrum team I have worked with has struggled with. What happens when you get to the end of a Sprint, and there are some stories that are only partially completed. The team in question was getting very de-moralized as they felt that every Sprint was a failure as they never had a set of fully completed stories. How do you avoid this? and/or what do you do when it happens? There were 2 pieces of advice that were well received: 1. Try to bring stories to completion before starting new ones. This is advice I give all my Scrum teams. If you have a 3-week sprint, what happens all too often is you get to the end of week 2, and a lot of stories are almost done; but almost none are completely done. This is a Bad Thing. I encourage the teams I work with to only start a new story as a very last resort. If you finish your task look at the stories in progress and see if there’s anything you can do to help before moving onto a new story. In the daily standup, put a focus on seeing what stories got completed yesterday, if a few days go by with none getting completed, be sure this fact is visible to the team and do something about it. Something I’ve been doing recently is introducing WIP (Work In Progress) limits while using Scrum. My current team has 2-week sprints, and we usually have about a dozen or stories in a sprint. We instituted a WIP limit of 4 stories. If 4 stories have been started but not finished then nobody is allowed to start new stories. This made it obvious very quickly that our QA tasks were our bottleneck (we have 4 devs, but only 1.5 testers). The WIP limit forced the developers to start to pickup QA tasks before moving onto the next dev tasks, and we ended our sprints with many more stories completely finished than we did before introducing WIP limits. 2. Rather than using time-boxed sprints, why not just do away with them altogether and go to a continuous flow type approach like KanBan. Limit WIP to keep things under control, but don’t have a fixed time box at the end of which all tasks are supposed to be done. This eliminates the problem almost entirely. At some points in the project (releases) you need to be able to burn down all the half finished stories to get a stable release build, but this probably occurs less often than every sprint, and there are alternative approaches to achieve it using branching strategies rather than forcing your team to try to get to Zero WIP every 2-weeks (e.g. when you are ready for a release, create a new branch for any new stories, but finish all existing stories in the current branch and release it). Trying to Introduce Agile into a team with previous Bad Agile Experiences One of the agile adoption challenges somebody described, was he was in a leadership role on a team he had recently joined – lets call him Dave. This team was currently very waterfall in their ALM process, but they were about to start on a new green-field project. Dave wanted to use this new project as an opportunity to do things the “right way”, using an Agile methodology like Scrum, adopting TDD, automated builds, proper branching strategies, etc. The problem he was facing is everybody else on the team had previously gone through an “Agile Adoption” that was a horrible failure. Dave blamed this failure on the consultant brought in previously to lead this agile transition, but regardless of the reason, the team had very negative feelings towards agile, and was very resistant to trying it out again. Dave possibly had the authority to try to force the team to adopt Agile practices, but we all know that doesn’t work very well. What was Dave to do? Ultimately, the best advice was to question *why* did Dave want to adopt all these various practices. Rather than trying to convince his team that these were the “right way” to run a dev project, and trying to do a Big Bang approach to introducing change. He would be better served by identifying problems the team currently faces, have a discussion with the team to get everybody to agree that specific problems existed, then have an open discussion about ways to address those problems. This way Dave could incrementally introduce agile practices, and he doesn’t even need to identify them as “agile” practices if he doesn’t want to. For example, when we discussed with Dave, he said probably the teams biggest problem was long periods without feedback from users, then finding out too late that the software is not going to meet their needs. Rather than Dave jumping right to introducing Scrum and all it entails, it would be easier to get buy-in from team if he framed it as a discussion of existing problems, and brainstorming possible solutions. And possibly most importantly, don’t try to do massive changes all at once with a team that has not bought-into those changes. Taking an incremental approach has a greater chance of success. I see something similar in my day job all the time too. Clients who for one reason or another claim to not be fans of agile (or not ready for agile yet). But then they go on to ask me to help them get shorter feedback cycles, quicker delivery cycles, iterative development processes, etc. It’s kind of funny at times, sometimes you just need to phrase the suggestions in terms they are using and avoid the word “agile”. PS – I haven’t blogged all that much over the past couple of years, but in an attempt to motivate myself, a few of us have accepted a blogger challenge. There’s 6 of us who have all put some money into a pool, and the agreement is that we each need to blog at least once every 2-weeks. The first 2-week period that we miss we’re eliminated. Last person standing gets the money. So expect at least one blog post every couple of weeks for the near future (I hope!). And check out the blogs of the other 5 people in this blogger challenge: Steve Rogalsky: http://winnipegagilist.blogspot.ca Aaron Kowall: http://www.geekswithblogs.net/caffeinatedgeek Tyler Doerkson: http://blog.tylerdoerksen.com David Alpert: http://www.spinthemoose.com Dave White: http://www.agileramblings.com (note: site not available yet. should be shortly or he owes me some money!)