Tips to improve project management in the Atlassian suite
Do you have a tendency to use the backlog as an eternal placeholder? If so, you probably have a lot of clutter that’s creating a lot of frustrations for your end-users. In this post we’ll show you how to clean up your Jira issues and reduce the backlog with some basic JQL queries.
Dashboards and visualization in Jira
We’ve led many Jira training courses and one of my favorite topics is visualizations and dashboards. A key point that I always make is that these can be made at both the individual and team level. You do not need to be a Jira administrator to be able to create really useful visualizations. So, if you or your team is not creating custom dashboards, you are missing out. The first step of improving is to measure.
“What gets measured, gets managed” - Peter F. Drucker
To help you get started we will share some of the gadgets we have been using to help our customers improve their way of working.
Cleaning up the graveyard
In “Making Work Visible” Dominica DeGrandis recommends visiting the oldest tasks every so often and either prioritizing or removing them.
The following filter helps measure the amount of dead issues in the backlog. Using the following JQL will get you unresolved issues that haven’t been updated the last two years, or have an empty description and haven’t been moved for a year. These issues do not represent any value. If they did, someone would have added a comment looking for an update. They are just waste and should be deleted.
resolution = Unresolved AND ((description is EMPTY AND updated <= -365d) OR (updated <= -730d))
This can be updated to fit the criteria you want. We’ve seen customers using a default placeholder description to remind people of GIVEN-WHEN-THEN scenarios or “as a developer I want to ….”. If that is the case, you will also have to pattern match on this to catch all of your stale issues.
As a bonus, it is healthy to check for an empty description in all cases:
resolution = Unresolved AND description is EMPTY
The epic showdown
Epics are a bit of a special child in Jira. They behave in a different way and show up differently in the backlog view. This means that many users forget that Epics are issues, just like stories and tasks. When all the tasks in an Epic are completed we mark it as done in the backlogs Epics Panel and forget about it. For some reason, this does not actually close the Epic issue.
The following JQL query will show you the unclosed Epics that people are no longer seeing in their backlog and have been forgotten about:
issuetype = epic AND "Epic Status" = Done AND resolution = Unresolved
In progress, but not really
Knowing what is in progress should be a trivial task. With work “in progress” the expectation is that it will be completed soon, whatever “soon” means in the enterprise. However, there are some common caveats.
An issue can be “in progress” but nothing is happening to it. This is often a sign that work has not been properly outlined, the assignee has multi-tasked too much, or something is blocked. Issues that are in progress should be updated regularly, preferably completed and closed. If they are not we should investigate why. The following query shows you issues that are in progress, but haven’t been updated in the last week: statusCategory = “In Progress” AND updated <= -7d
Work priorities can change, but if we forget to clean up our issue tracking we are not presenting up-to-date information.
A trivial statement to make about issues that are in progress is that someone should be working on them. Otherwise, they should not be considered to be in progress. This JQL shows you issues that are in progress, but unassigned:
assignee is EMPTY AND statusCategory = "In Progress"
If working in a Scrum environment tasks might have been removed from a sprint after work started on it, or there could be tasks in the closing sprint that were moved to the backlog rather than the next sprint. The following JQL will show you issues that are in progress, but not in an active Sprint:
resolution = Unresolved AND Sprint not in openSprints() AND statusCategory = "In Progress"
The above queries can be saved as filters. And restricted to specific projects using project in (proj-1, proj-2)
or project = proj-1
We have had a lot of success visualizing these project management obstacles and putting them on a big screen means they are attended to and prioritized. The key lesson is - don’t be afraid of the backlog. It’s not the horrible task you think it is. With these queries, dashboards, and filters you can massively reduce the clutter in your system without getting your hands too dirty.
Published: Apr 24, 2020
Updated: Jun 1, 2021