Saturday, May 19, 2012

Using Kanban for Work

I've been using agile development methodologies (Extreme Programming (XP), RUP, Scrum, etc) for over a decade now. In every job I've had in that time I've touted the benefits of using agile rather than whatever process was prevalent (usually just basic waterfall). In some cases the teams totally bought into it and saw fantastic productivity improvements (like a 300% increase at one company). I've had grassroots support in the trenches only to have senior management balk at it ("too hard to track", etc. - the typical NIH issues). In some cases, the team decided to implement it anyway. Other times the team thought they knew the technology but just ended up with iterative waterfall (smaller waterfall cycles).
Example KanbanFlow board
For all of my work with Otto Von I've done agile in some way. I've been doing primarily XP with some modifications given I'm a one-man shop. But lately Kanban has been getting a lot of traction in my mind and I've just started using an online Kanban board (see this post for a little more about it). What I like about Kanban is that it's really better adapted to how I need to work and what I focus on from an agile perspective - take on a small chunk of work, complete it, move on to the next.
A slice of cake is like a story
So what does Kanban offer? First, as in all agile methodologies, you start with decomposing the work that needs to be done into small pieces. The key concept is to look at the entire project as a cake that you cut into vertical slices. In most applications there are layers that need to be built (back-end, UI, storage, database, etc). With the slice, you focus on doing all of the work on the layers at one time in the slice while providing some small element of value to the project. In the picture above you can see that I've got stories like "Add Friend". These require UI changes. back-end code, and DB changes. That's my slice for that piece of work. These can sometimes relate to "functionality" or "features", but traditionally features are larger than a story would allow.
Your first column is usually the "backlog" or "To Do" list. These are the stories that you've started to define but aren't really complete enough to really consider for developing. Ideally you prioritize the backlog so you can quickly identify those stories that you need to finish defining first. Your "Ready to Pull" list are the stories, in priority order, that can be worked immediately if you have the bandwidth. The "In Progress" is just that - things that you are actively working. Sometimes called your "WIP" (work in progress), this should contain only those stories that you can work on and complete in two weeks (the standard iteration/sprint length). This insures that you don't try to take on multiple tasks that de-focus you from working something through to completion. Finally, when you've completed a story you move it to the "Done" list. It's pretty straight-forward, but the challenge is making stories/slices that are usable and small enough. It takes a lot of practice and even after a decade I struggle sometimes.
Kanban allows you to have multiple work items in process (your WIP limit). For me that's generally one. I need to focus on that one thing, get it completed, and move on to the next. With a larger team than I have (i.e., more than one),  your WIP limit will be larger. Using the Kanban board lets me prioritize the work that needs to be done. I can add new stories, shift priorities - all things that are important in running a small project.
KanbanFlow, the free(!) online board I'm using doesn't have some typical user story fields (and no, I don't get a kickback for rating them so highly, but maybe I should; are you listening, KanbanFlow?!). For instance, it tracks time in hours not points. I guess you could use the "hours" field as a "points" field, but overall it's a small thing. So far I am very pleased with the software and able to work around (or ignore) the things I don't require.
If you're looking to get some focus on your work, Kanban is certainly one methodology that you should explore. And KanbanFlow is a very good free service should you choose that direction. Good luck and happy coding.