I came looking for an answer for this a while ago and have since worked out a very neat and simple system, which meets these key goals for me:
Goals in order of importance:
- Make it possible to enter a new task/bug as effortlessly as possible, so that I can jot it down as soon as I spot it or dream it up, and go back to coding before I lose my place.
- Make it easy to see and manage the issues without a lot of searching, clicking, drilling down.
- Make it easy to tie in with version control so I can later find out what changes were made to resolve an issue, or what task or bug drove a specific change in the code.
- Make it relatively easy to set up: minimal installation and configuration and minimal price.
(3 and 4 are less important, and I would have been okay with a system that didn't provide them, but this one does).
Step 1: Get a project in Bitbucket
I use bitbucket for issue tracking and for git version control (for an iOS project in XCode for example).
I looked at FogBUGz (which I've read about for years on JoelOnSoftware) and GitHub and others, but bitbucket seems to have the best free features set for small teams.
Step 2: Use Bitbucket Issue Tracking in the project
Next I set up issue tracking in the same bitbucket project. So my project now has a git repository and issue tracking.
Step 3: Make issue tracking easy!
For this I'm using Bitbucket Cards which is a nice, simple kanban-like front end to the Bitbucket issues. You just have to log into your Bitbucket account and set up the columns you want.
I have four columns: Backlog, Next, Bugs, and Resolved. (I'm thinking of merging Bugs with Backlog, but never mind that for now)
(This image is from the Bitbucket Cards blog, not from my project, hence the columns are different than the ones I use)
Bitbucket Cards lets you set up a very simple filter for each list where you choose the status(es) and kind(s) of issues that go in a card column. So,
open status issues of the kind
bug go in the Bug column.
(This one is from my project: that's how I select what goes in the Bug column)
What's really cool is that when you drag and drop a card from one column into another, it will automatically change the status of the issue the card represents to match that in the definition of the destination column.
Another nice thing about Bitbucket Cards is that it doesn't time out easily. This is crucial since the aim of this whole set up is to make it easy - so this system works for me instead of me working for it. I open a bookmark my card page and it stays open on a Chrome tab all day.
This takes care of my 2nd goal.
Step 4: Tie it in with version control.
Bitbucket issues tie in neatly with version control (as to most of the competitors) so when I'm finished working on an issue I commit it git with a message like "Added the thingo to the whatsit. Fixes #245".
If I commit this, then push it, then reload my Bitbucket Cards page, I'll see that the issue has moved to the Resolved column. Cool.
There's my 3rd goal done.
Step 5: Make it easier to CREATE issues.
You probably think that this whole set up is already way to complicated to set up, and why would I want to add another web app to the process. Well, remember my primary goal above: I want to make it so easy to add a task that I don't lose my train of thought before I get to the text area to type it in, nor do I want to lose my place in the code by the time I get done.
Now, Bitbucket Cards does let me create tasks fairly easily, but it's just a bit to clicky/scrolly to fully meet goal #1. You have to click Create an Issue; then a modal editor pops up; after entering your issue title you have to scroll down to specify the kind (bug/task) and the priority; then click create.
Instead I chose to use a second Bitbucket app called taskrd.
You can set up taskrd, by giving it your Bitbucket login, and set it on a bookmark and tab, and keep it open all day, just like Bitbucket cards.
Taskrd has a much simpler workflow for adding a new task, just type it in, optionally set the kind and priority, and hit the Add button.
(this image is from the Taskrd blog)
Now it's arguable that it's not worth the effort of setting up Taskrd over using Bitbucket Cards or even Bitbuckets own issue-entry system. After all, with Taskrd I have to click a tab on my browser, and click Reload on my page with Bitbucket Cards for it to refresh and get the new issue I added in the Taskrd app. But in fact, I find that I'm generally in mode or the other: Either I'm using Bitbucket Cards to organize what I'm doing next, or to look through the bug list, or I'm busy coding and entering tasks/bugs as they occur to me - all in rapid fire mode. For this 2nd mode of work, the Taskrd is great: I just keep it open on a separate monitor, and quickly enter issues as I work.
So that covers goal #1.
My last goal was easy/cheap set up.
Well cheap it is: all of this is free. Bitbucket has free private repositories for up to five users and the other apps were free.
Setup seems non-trivial based on the above, but really the most complicated part was setting up git to push to the bitbucket repository which will be the same anywhere. I didn't have to install anything, and connecting both of the apps to my bitbucket repository was pretty easy.
Setting up the cards columns how I liked them took a bit of playing around but wasn't really hard.
Reading this back, I might come off as a bit of a shill for Bitbucket - but I really don't mean to. It's just that I've been using this process for weeks - after years of trying different configurations to track what I'm doing - and I'm really digging it, so thought I'd take the time to lay it out for others.