How to set up a quasi-kanban for Jira in VS Code

April 29, 2021 jira task management vs code


The Kanban, in action

Jira is undeniably a powerful project management system, that can fit many cases for many teams. Sadly, its flexibility comes at a cost - basic developer workflows become tedious, and the slow web UI doesn’t help.

After struggling for a bit with the web UI and the MacOS app, I found a Jira flow that works for me, and it’s based on VS Code, where I do all of my work.

Setup steps

  1. Install the Jira and Bitbucket (Official) VS Code extension.
  2. Set it up - either globally, or per workspace. Tip: you can disable it globally, then enable for certain workspaces - that’s what I do.
  3. Ensure the sidebar “Atlassian” item is showing; otherwise right-click the sidebar and turn it on.
  4. Create filters (see below)

My “Kanban” filters for Jira

The Atlassian sidebar from the extension lists Jira tasks, and lets you add new tasks. But it is a simple list - with no way to see anything but the task name. So, out of the box, it is not very useful.

However, instead of looking at the inconvenient list of all tasks in Jira, you can define a number of JQL filters that will become sub-lists. JQL is a query language for Jira tasks, that can pull up almost any selection of tasks.

So what do I do? I set up a Kanban. Kanban is a board that lists tasks divided by workflow stages. This way it’s immediately clear what stage needs the most attention. Should you focus on defining work, doing the implementation, or closing pull requests? Kanban shows you the way.

Usually kanban is organized horizontally, but in my implementation, it goes vertically in the Atlassian sidebar. I created several JQL filters for the sidebar, and each filter displays one stage of the workflow.

(Note: I list filters in the workflow order, but I actually have them reversed in my sidebar - because later stages of the workflow need more attention.)

Created by me & unassigned

This is the ultimate inbox/icebox for requests and promises. Before, I was hesitant to use Jira as an inbox, as tasks tend to get lost, unless put in the right place. But with this filter, nothing I add is ever lost.

assignee is EMPTY
AND creator = currentUser()
AND project = "My Project"
ORDER BY lastViewed DESC

My epics + unassigned

This is an inbox for all work that anyone creates in an epic that I’m responsible for. It exists because sometimes people add tasks to an epic but don’t assign them.

Tasks here should be reviewed and assigned to me, or to somebody else. Then they move into the “Backlog”.

assignee is EMPTY
AND "Epic Link" in (MP-1234)
AND project = "My Project"
ORDER BY lastViewed DESC

Unfortunately, I haven’t found a way to do a “join” on epics, to say "Epic Link" in (SELECT epics WHERE assignee=currentUser()), and the list of epics is manual. But it doesn’t have to update too often.

Backlog

This is all of the tasks that I am responsible for, and have not started yet.

assignee = currentUser()
AND status = Backlog
AND project = "My Project"
ORDER BY lastViewed DESC

Active

This is all of my active work.

assignee = currentUser()
AND status not in (Backlog, Closed, Accepted, Cancelled, "In Testing")
AND development[pullrequests].all=0
AND project = "My Project"
ORDER BY lastViewed DESC

The pullrequests filter is the clever part and it is used to separate tasks from the next filter: In PR.

In PR

Once I’ve made a PR for a task, the nature of my work on it changes - now the task is being reviewed and finalized. So it’s useful to see such tasks separately.

assignee = currentUser()
AND status not in (Backlog, Closed, Accepted, Cancelled, "In Testing")
AND development[pullrequests].all>0
AND project = "My Project"
ORDER BY lastViewed DESC

In Testing

These tasks are no longer my responsibility but the QA engineer’s. But I still prefer to track a task until its completion.

assignee = currentUser()
AND status = "In Testing"
AND project = "My Project"
ORDER BY lastViewed DESC

Closed (not shown)

Finally, all tasks that don’t match the filters above are closed - no need to see them anymore!

Adapting the filters for yourself

My work loop

In conclusion

To reprase Alf, if you don’t like Jira, you just don’t know how to cook it!

Buy me a coffee Liked the post? Treat me to a coffee