At IxC, like in many other Web companies, we’re experimenting with all things agile. Today’s post is about one of our recent experiments concerning the way we’re using our ticketing system in our client projects.
Tickets and how we assign them
Tickets are at the core of our daily workflow. They allow us to coordinate our efforts and track our progress. However, it sometimes can be difficult to deal with their high volume (as I write we have 341 open tickets spread across 30 projects, all hosted at Assembla).
With all these tickets you can’t expect each of our staff to go through the whole list every time they are available to start working on a new task. That would be a waste of time. Instead, wouldn’t it be easier if one constantly had a pre-processed short list of things to work on? This is what we’re trying to achieve by assigning someone to every single ticket.
Two great benefits of that approach are that a) no ticket gets lost or forgotten and b) you can quickly figure out what to work on next by looking at your own short list (generally between 15 and 30 tickets at any given time). This approach also implies that every person assigned to a ticket is responsible for taking the next action and moving the corresponding task at least one step further – this can be either by writing a piece of code, answering a question, or generally making sure that the task is being looked after.
So, to sum up, our number one rule is that every ticket should be assigned to somebody at any given time. If a ticket is unassigned then everyone has the right to assign it to anyone else. Here are our guidelines for assigning tickets:
- Every ticket needs to be assigned to the person you think is most appropriate to take the next action (sometimes this person might be you). The next action may be, for example, investigate a problem, implement some code, or answer a question. If you’re in doubt then assign it by default to the project manager. If possible, and unless it is absolutely obvious, try to write a short comment explaining why you’re assigning the ticket to that person.
- If you create a new ticket, apply step 1.
- If you get assigned to a ticket by someone else, and you think you’re not the right person to take the next action, apply step 1.
- If you’ve completed the action you were supposed to do (e.g. investigated a problem or answered a question), apply step 1.
- If you’ve finished implementing some code and that code needs testing before being committed, apply step 1.
- If all else fails, apply step 1.
- Otherwise, apply step 1.
- Go to step 1.
- If you have reached this step, you win a romantic getaway for two to the industry conference of your choice. Now apply step 1.
These guidelines ensure that project management is more or less distributed amongst all of us, at least at the micro level: everyone can focus on the tickets that they’re assigned to and that have the closest milestones or the highest priorities. There still needs to be some management done by project managers at the macro level (i.e. defining the milestones and priorities across projects) but the effort is generally much easier to bear when spread across all of us that way.
Obviously, one might think that this system has some limitations (e.g. tickets might be assigned to the wrong people, or too many tickets might be assigned to one person and too few to another). However, I’m a firm believer that all these limitations can be avoided if you organise…
Weekly and monthly ticket reviews
Agile is all about the dynamic steering of the company’s business and operations. This means that nothing is set in stone and that everything should regularly be reviewed, taking the current situation into account. This applies to tickets too, which is why each of us does a quick review of all their own tickets at least once a week.
Weekly reviews themselves are not a new idea. They have been famously advocated by the famous David Allen and his famous Getting Things Done methodology. All we’ve done is to apply this methodology to our ticket workflow – after all, tickets are just a form of todo items. These reviews, which take about 10-15 minutes, give each of us the opportunity to reassess what they should be focusing on and to make sure everything keeps moving forward.
While weekly reviews are done individually and asynchronously at one’s personally convenient day and time, we also organise larger, monthly, ticket reviews. Monthly reviews proceed the same way and have the same purpose as weekly reviews, except for a few differences, as they are done:
- Synchronously: everybody reviews their tickets during the same timeframe (about 1 hour).
- Collectively: it occurs when we’re all at the office, at the same time. Those who really can’t be at the office may participate via Skype.
- Thoroughly: an update is posted in nearly every single ticket.
The monthly review takes the form of a sprint where everybody focuses their effort on the same thing, at the same time and in the same space (whether physical or virtual). One advantage is that everybody switches to intense review mode and achieves better and quicker results than if the review was done sporadically and interspersed with other unrelated tasks. Another advantage is that it’s easy to walk across the room or chat via Skype to ask a quick question about a ticket to another person, because that other person is in ticket review mode as well. And it’s also more fun for all of its social values: “We’re all in this together!” :-)
It is worth noting that since we intentionally keep it limited to a short timeframe, we try to avoid any distractions, for example by switching Twitter off. Skype is OK. Email is OK too but only if it is to check the ticket update notifications.
For each ticket that is reviewed, one should ask - is there anything, no matter how big or small, that could be added to this ticket to help it move forward? More specifically, here are the questions that should be pondered (and the corresponding actions that one should take):
- Have I already started working on this? If so, then give a quick report on what you’ve done so far. Otherwise, say honestly if you’re planning to start working on it soon or not. If it is soon, then this would provide reassurance to the people interested in this ticket that the work is being looked after. If it is later, then potentially someone eager to get it fixed may be interested in grabbing the ticket from you.
- Was there no work done since the last update? If there’s a reason for the work not having made any progress, then mentioned what it is.
- Should I really be the person dealing with this? If not (e.g. because you don’t have time or do not have the appropriate expertise), then reassign to who you think is the best person, or to the project manager by default.
- Is it clear what it’s about? If not, then ask for some clarification and reassign to the person you’re expecting to get the answer from so that the question falls under his/her radar. That other person might be the original reporter, the project manager, an expert in the area the ticket is tackling, or sometimes even the clients if they have access to the project’s ticket space.
- Is it really relevant? If you’re absolutely sure that it’s not (e.g. the bug is not reproducible any more, or the feature request has been dropped), then explain why and close as invalid. If not entirely sure, ask and reassign to the original reporter or the project manager.
- Has it already been fixed? If so, then close it as fixed and, if possible, give a link to the changeset or explain when and how it was fixed.
- Is there any caveat that people who may be interested in this ticket should know about? If so, then say it! It is useful to write it down for yourself and for others so it won’t be forgotten when someone starts working on this again later on.
- Does something need to happen before I can start working on this? If so (e.g. another bug needs to get fixed, or some info needs to be provided), then say it, and possibly reassign the ticket to the person who should actually take the next action. Also use ticket relationships (e.g. parent, linked) if there are any.
- Has the ticket now become a high (or low) priority? If so, then change the priority.
- Should the ticket be attached to a different milestone? If so, then change the milestone.
- Is there any general useful piece of information or advice that I could share here? If so, then say it! The more relevant information is provided, the better.
- Is there really nothing to say at all? If so, then that’s cool. But are you sure there’s really nothing to say at all?
Generally it is great to say something, even if it is really small and apparently insignificant at the time. The ticket may remain open for a long time beyond that point, and you (and everybody else) will likely be very glad to have access to all those pieces of relevant information when the ticket is worked on weeks or months later.
Results of the experiment
Ten of us gathered last week for our first monthly review and it has been tremendously productive. 45 tickets were closed (some had become irrelevant, some had already been fixed and others could be fixed right on the spot), 8 new tickets were created and a total of 250 ticket transactions were recorded.
After this first experiment we have already observed the following benefits:
- Increased confidence that we’re on top of things – Everybody gets a general awareness of where things are at, what the new priorities are and what we need to focus on.
- Better assessment of everyone’s workload – People realise if there are too many or too few tickets assigned to them.
- Reassurance that each task is assigned to the best person available at the time – The person assigned to a ticket is (hopefully) the most able to take the next action and take the work further. If not, then the review is a great opportunity to make sure the right person will actually get assigned to the task.
- Elimination of irrelevant tickets and refresh of all the stale tickets.
- Overall reduction of the time spent in project management since the system is more or less self-sustained.
This approach probably would not suit large open source projects but I think that it suits client projects really well. It does require some rigour but the results for us so far have been very positive. I’ll post again later on this topic to report on how it works out in the long term. In the meantime, let us know what you think and if you apply similar methods in your workflow!
LESS eh? And here's me, still banging on about SASS, when LESS seems nicer. Gosh, don't things move swiftly in the world of webby things. I immediately went and did: sudo gem install less
So thanks fro that :-)