11 September, 2010

Refining JIra

Jira (GreenHopper) Refinements

We're using Jira - mostly Greenhopper - to visualise our pre-board backlog.

This is what it looks like:

Our Greenhopper View

There are a few things worth mentioning:
  1. We don't include "development bugs" on the board (see week 1)
  2. We use highlights in Greenhopper to grey out things that are on the board. This helps when we're choosing items to add to the board
  3. We use sub-tasks to track detailed work in some cases
  4. Sub-tasks don't go on the board
It looks like some of our restrictions on Jira types could be lifted soon, so we will be able to more accurately represent the 4 types of work we actually differentiate (at the moment we are limited due to shared infrastructure).

In practice, we're only interested in:
  • Project
  • Improvement
  • Production bug
  • Development bug
While there's no practical difference between an "improvement" and a "production bug", I'm finding it's pointless arguing the toss.  For now, we log them separately, but Production Bugs get prioritised the same way as an improvement.   Only Development Bugs get special treatment (and they don't generally go on the board).

.. ( transmission ends ) ..

04 September, 2010

Early learnings

Hitting a WIP limit (fessing up)

Goeff WithaG pointed out that three cards currently in the queue for projects were really not in the queue at all because he had done some work on them already.

So, fessing up, I moved them into the "pre-dev" "wip" column and hey-presto, our first red card! We had gone over our limit of 2.

Our first red card


What to do?

My preference was to move them right back to the queue again.  This is where "make the work visible" from our Kanban became valuable.

I spoke to The Hadster and Shoes about it, explaining that we were going to move it back in order to respect the WIP limit.

What this meant was that of none of us were going to working on it.

This was a simple but powerful result for me.  All of the people working on an item are working on the same priority and with the same focus.

This has always been a challenge in project environments for me; where a BA is working on items x, y, z; but TA is working on y, a, b - which very quickly gets hard to coordinate, especially in terms of communicating externally with documents.

In the immortal word of a dutch friend of mine "I like it a lot" :0

WIP limit on avatars

Javascript suggested at one of the standups that we could use our avatars as a way of limiting WIP on a person-by-person basis.

We've adopted that on the basis that we only had a few to start with.   I'm not policing it yet mind you - and I noticed that the Hadster has run out, but all he's doing is arranging his cards so that his avatar is stuck across two cards!

Having said that, I'm seeing that limiting it will be a good idea at some point soon if the overall WIP limits we set on maintenance tasks doesn't solve the problem in a simpler way.

The backlog is not a wish-list

I was hoping to have a rationalised list of existing Jira items (pre-queue) by now.   What I'm noticing is that it's been a notepad for any idea that has been emailed in from the wider community.

I look at the backlog every day, but despite that it's still difficult keep clear in my head.

I was thinking about how I apply the "limit WIP" philosophy to this.

It seemed sensible that not everything should just be thrown on the backlog.

This was partly because it clearly hadn't helped to this point - there were items in there going back six months that we were in no danger of being worked on! nbsp; Another reason is that we had the same "spinning plates" problem, just earlier in the lifecycle. nbsp; With such a long list, the overhead of just.

So if not everything should go on the backlog, how do we choose?

Benefit-driven backlog

The logical solution is to only allow items on the backlog when we have enough information to sequence their benefit relative to other items in the backlog.

In our case, most of our suggestions come from a desire to take pressure of call centres or reduce cancellations, reduce dropout and so on.

I've spent time this week talking to originators of older Jiras, to get a feel for more metrics, to add them to comments for our prioritisation meetings (when we start them).

This in turn has lead to a suggestion to all of our stakeholders; to better track inbound call volumes, reasons for cancellations and so on.   This seems to have been well received and it will give us a way to sequence our work much more effectively.

I've actually closed down a couple of the related Jiras with instructions to the stakeholder to re-submit it to us once they have some of these metrics captured.

Obviously this is something unrelated to Kanban, but using the "limit WIP" ethos seems to be working out for us in more ways than one, which is great.

Help someone else

While we're in transition, developers have been grabbing stuff from the backlog (Jira) that requires little or no pre-dev work and putting it straight into "dev" "wip".

Brazil came over today to chat about what to grab next.

Instead of going to Jira, we went to the board to have a look...

Maybe we shouldn't grab something new?

Even though we don't have a WIP limit on maintenance yet, it was pretty obvious that there's too much going on, right?

We asked ourselves what we would have done if there was a WIP limit.

The Kanban answer is - help someone else.  So we had a look at what was on the board already and how Brazil could help move one of these along quicker.

Actually there was.  Even though it required a 10 minute conversation with Geoff WithaG, there was an item already in WIP that Brazil was going to be working on later anyway, so we just pulled it forward.

Such a simple thing, but now instead of increasing the number of spinning plates, we're putting energy into moving the current work faster, which I suspect is going to be more satisfying for developers too.

Walk and Talk

While looking at the board with Brazil earlier, I noticed that there was another item there that Cheshire hadn't mentioned in the morning stand-up.

I asked him about it.   He was waiting on Shoes to get back to him.   She in turn was waiting on an answer from another team regarding a list of values for a drop-down, before she could hand it back to Cheshire and it could be completed.

Shoes was not at her desk so we walked over to the other team, who sit on the same floor.   I introduced Cheshire to the business manager of that team and explained that it was holding us up.   As it turns out, the person we needed to talk to wasn't around either, but now Cheshire is in direct contact with the right person I suspect it will move much faster.

Cheshire and I agreed that this walk and talk approach was a good one and more empowering, so I'll bring it up at our retrospective.

The agile manifesto "Individuals and interactions over processes and tools" is going to be a good strategy for us to ensure work items move swiftly through the system instead of being held up by email inboxes.   At least I hope this is the case!

Happy with the "real" wall

After a full week using the "real" Kanban wall (more accurately whiteboard!) I'm pleased we went this way rather than opting for the electronic-only option.

We've only had a couple of instances of getting out of sync so far and these are more about getting used to the issue types in Jira rather than the process itself.

We're enjoying the upside of having something physical to interact with; it's encouraging people to grab other people, walk over to the board and have genuine interactions rather than relying on computers to communicate for them.

So despite the fact I was keen on the electronic version to start with, I'm taking full enjoyment from the low-fi solution.

First prioritisation meeting

We had our first prioritisation meeting this week.

During the week I've been instructing people not to raise new requests in Jira, but to keep a list and table it in person at the meeting.

The objective of this meeting was different from those I've run in the past with Scrum or XP.

Because Kanban is based on a "pull" principle, all we really needed to do was to put a few items in the queue - so that there was just enough for the pre-dev work to happen for 1 week.

As expected, the first meeting was a dog's breakfast in terms of side discussions and we went into too much detail on a few things.   But we did achieve our objective, which was a list of 5 items that everyone agreed were the more important from a business perspective, for the queue.

We also agreed that we would use some of the remaining technical requests (e.g. purge job, cleaning up some properties files) as fillers if people had a small gap to fill at the end of the week.

Columns aren't human beings

One of the questions that came up last week was "do items move backwards and forwards?".

For example, if something is in acceptance testing and we get a bug, does it go back to in-dev?

Or if something is in dev and I need a clarification from someone regarding requirements, does it go back to pre-dev?

What we realised is that there's a tendency to treat the columns as groups of people - rather than the states that a task moves through.

It's a subtle but important distinction for us.   Especially given that we're encouraging people to cut across these boundaries when they're helping each other out.

So the answer for now is no, we don't generally move things back and forth to represent handing it back to developers or forward to test etc.   These are just overall representations of where the task it at in its lifecycle.

Big tasks vs. small tasks - what's on the board

As with any project, our big tasks are broken into smaller tasks.

If something has value and can be deployed by itself, it can go on a card on the board (and Jira of course).

If this "thing of value" is significant, we have two options:
  1. Break it into smaller cards
  2. Leave it as one card, break it into sub-tasks in Jira
My preference is the first option - but we can only do that if the two cards each have value in their own right - and can be deployed separately.

In cases where we deploy as one unit but break into sub tasks in Jira, we use Jira to manage and track the individual tasks - rather than the board.

This philosophy clicks with the rest of our operating model in two ways:
  • Sub-tasks tend to be less than a couple of hours, so individually they're "noise"
  • Most of the ones with sub tasks are projects


..  ( transmission ends ) ..

Our first week

Our focus for the first week

In true agile fashion, we wanted to implement the basics first and then improve from there.

For the first week we ended up working on:
  1. Structure of our first Kanban board
  2. Rationalising the existing Jira backlog

Kanban Kolumns

As mentioned in Inception, we had a copy of "Kanban and Scrum - making the most of both".

We picked up that v1.0 of our board would be transient, so we tried to avoid spending too much time on it.  To start with, we copied the columns from one in the book - why reinvent the wheel?  

Real wall or electronic?

Next was a key decision; do we have a "real" board, or do we use Jira's ability to do swim lanes for each Jira state?  This took a few days.  

My initial temptation was to use Jira because we want to make the work visible to people in other offices around the country.   I'll also put my hand up and admit that after 13 years of agile experience, I'm still pretty amateur at setting up "real" walls that are maintainable.   Muchos work tended to go into maintaining consistency between the wall and various work and test tracking tools.  

We decided to go for a "real" Kanban wall in the end though.   This was based on one problem - we didn't have free reign to create new states in our Jira installation.   This is because we share with other projects.   The Jira columns are based on states and we didn't have enough already so we couldn't use it.

We scrounged around for free wall space but other teams on our floor were hogging that :)

Irish, our lead developer, suggested we go for a whiteboard with wheels, so we could move it into meeting rooms.   Genius man.   Bummer, none to be seen but we eventually spotted a couple and managed to borrow one with broken wheels and with makeshift tools The Hadster fixed it up enough to hobble along!

Putting things on the wall

I worked with The Hadster for an hour, mainly thinking about some of the work we were currently doing and how it would flow.   We got side-tracked a few times wondering if our implementation of Jira could inter-operate, but left that in the end.

The one alteration we made was to have two swim lanes to represent project work vs.  maintenance.   I figured these would have different sizes, speed and limits.   It was also important to me that we keep our funding obligation (project work) in focus at all times.

Kanban Board v1.0

Here's how it looked:

Kanban Board v1.0

WIP Limits

I arbitrarily set the WIP limits for project work.   For me, this was the driver for trying Kanban in the first place so I felt reasonably comfortable that this was a better situation than not having a limit at all.

We didn't immediately set a limit on the maintenance stream as we knew it would take a while to get all WIP represented there first.   Limits would hopefully be obvious after that.

Our first Kanban stand-up

During our first stand-up, I spent a few minutes explaining the basic idea (make work visible, limit WIP) and explained that we'd probably evolve to a stand-up that focussed more on bottlenecks etc than the round-robin update that we'd been using to date.   This was something I picked up from the book.

There were quite a few questions that came up during the session so it took a full half an hour (rather than the normal 10mins).

There were loads of questions we didn't have answers to.   I tried to focus on the things that we could see/touch/feel at the moment.   Quite a few "what if" scenarios came up, we left those unanswered for the time being.

A few things worth mentioning.
  • "Noise" (work less than 2hr) would not go on the board for now
  • Should we use avatars to indicate who's working on what?
  • Development bugs would not go on the board for now, we would just fix them, track with Jira
  • We needed to figure out how Jira fits in
  • We should put Jira numbers on the cards
We discussed production and development bugs.   Until we had better metrics, I was keen to manage production bugs the same as any other "maintenance" item.   This was just a preference from experience.   In reality production bugs, if they're of a non-urgent nature, need to be evaluated against everything else in the pipeline, so I don't see the point in labelling them as different, at least for now.   Development bugs on the other hand are relating to code that's fresh in everyone's mind, so the overhead of "just fixing" is low in comparison with the overhead of managing / prioritising them - something I picked up from a good developer on a previous job.   Our releases are reasonably frequent, so we dont' get a huge backlog of bugs that require this sort of overhead.

Making it work with Jira and Greenhopper

It was obvious we needed to get a clear connection between Jira (where the wish-list of work items pre-existed) and the board.  

We were keen to find a way that didn't require a significant amount of dual maintenance.

This took us quite a while, because we are limited in what we can change in our internal installation of Jira.  

An example: We wanted to call our Jira types "project", "maintenance" and "development bug".   But we share a Jira installation with other projects and there's a desire not to muddy everyone's list with items that only our project uses, which is fair enough.  It's causing a bit of confusions at the moment because people are creating new "maintenance" tasks as the Jira "new feature" type - which is the one we're using for "project".   Just because they're new items doesn't mean they're project work of course.   Bummer, we'll get there!

After a couple of days looking through (and trying to rationalise) the list of items in Jira, we came up with an approach as summarised in this diagram:

Jira states in relation to the board.

In summary, here's how it works for now..
  1. Jira "open" means not yet on the board (backlog)
  2. When an item moves into the board's "queue" column, we set it to "in progress"
  3. When development/unitTest is done, Jira's state moves to "resolved"
This way we're hoping to minimise the number of state changes we do in Jira when post-its move on the board - while still maintaining consistency between the two.

We're hoping this will make is easy for people in other offices to easily tell what's on the board (because it's in a state other than "open").

How did Kanban help?

As soon as we started discussing the idea of Kanban, particularly the limited WIP part, we started to change our mindset.  

The Cool and I had an easy conversation about his focus for UX - which was currently across many many things in Jira even though they weren't actually "in progress" yet from a development standpoint.   Because those things were not on the board, he could relax a little and focus on a smaller number of things.  This was a relief for him.  

As soon as we had v1.0 of the board up, it was immediately obvious to the whole team that we had some problems other problems too.   You can see that there is a big void in a couple of places.

The first void is between current project work and what what's in test.   This means we're going to run out of project work to start development work if we don't get a hurry on.   So we know where to focus our energy/priority/focus for a few weeks there.

The second, which compounds the first, is that there's a void of maintenance work "ready for development" i.e.  in the "pre-dev" "done" column.  

What's been happening up until now is that the development team would work on technical tasks like refactoring and specific features like purge jobs.   I could see that I needed to deal with this as my most urgent priority, to make sure we also had real business improvement tasks added to the stack.

All in all, a hectic week trying to get ready for a release next week and at the same time get our heads around a new way of working.

What I would say in closing is from a personal perspective...

It was much less strain on the team this week to introduce (the two basic ideas of) Kanban - than it has ever been for me to introduce the Scrum methodology.   I'm not dissing Scrum; we're still using many aspects of Scrum, but that ability to introduce something very simple yet very effective has been "heaps good", as the kids say down under :)

..  ( transmission ends ) ..