Cleaning up Jira

Hi all :wave:

I wanted to share information that relates to our ticket tracker, Jira.


  • You may get notice that an issue you are watching has been closed with a resolution of “obsolete”.
    • If you find this action to be by mistake, follow the instructions in the comment that was attached to the ticket.
  • More information related to when we migrate from Jira Server to Jira Cloud will be announced.
    • We will attempt to migrate everything: user accounts and tickets will be as they were.
    • Jira Cloud has an updated user interface, so it will look and feel more modern.


The Jira Software product that we use at is nearing its end-of-life, and what that means for us is that we have started thinking about what to do when that happens.

We would like to keep using Jira, but not necessarily spend resources hosting it ourselves as we have done in the past, and Atlassian has offered us to move to Jira Cloud instead.

Cleaning up before we migrate

In preparation, we are in the process of cleaning up Jira to make it easier to work with.

Our Jira has gathered a lot of cruft over the years, both in terms of configuration and stale tickets, and we need to do a round of significant cleanups to improve the health of Jira as a tool for everyone.

The clean up happens on two sides, one is the configuration side to make it easier to manage over time, and the second is to close issues that are no longer applicable to supported versions of DHIS2.

When we cannot determine if an issue is still relevant, we will close it with the resolution “Obsolete” and add a comment about possible actions you can take if you think that the issue was closed by mistake to get it re-opened and re-prioritized.


We are sorry about the inconvenience this causes you and that you are happy with the end results !



Just want to say - Kudos to the DHIS2 community for going through this Jira cleanup process. We went through a similar experience at OpenMRS a year ago; this clean up had a substantial impact on our ability to focus on what’s important and to triage/manage team-specific backlogs.

We now do a quarterly clean-up we call “The Graveyard” where issues not updated at all in >1 year are reviewed (to check for important things missed), a warning message is sent out, and 2 weeks later anything still not updated is automatically closed. (They’re not deleted.)

So a bit different than handling a system EOL, but wanted to celebrate this shared problem anyway :slight_smile: (I couldn’t actually access DHIS2 Jira; so I’m curious what the JQL you’re using was?)

OpenMRS examples:


Hi @grace.potma :wave:

Thanks for sharing your experience and links.

If you would like, our Jira is open in the sense that you need to register for an account. The process it automatic and there is no more ceremony after that.

As far as filters go, I use something like this:

filter in (12073)
  and not updated >= endOfMonth(-2y)
  and not status changed during (endOfMonth(-2y), now())
  and status not in (closed, resolved, done)
  • filter in (12073) uses another filter as the base for the search, and 12073 is the id of the filter, usually simplest to pull from the URL:
  • updated is a internal Jira field that I use to see if there has been any activity on an issue.
  • endOfMonth() is a function that returns the date the current month ends (2021-11-30), but I pass in -2y to get the date for the end of the month two years ago (2019-11-30).
  • Those two put together, I check for issues that have not had any updates the last two years.
  • status changed during (endOfMonth(-2y), now()) is pretty readable; it checks for issues that had a status change between 2 years ago and today, then we invert it to get those with no changes instead.
  • status not in (...) just filters out issues that are already closed in some way so they don’t show up. This could have been done in the 12073 filter instead for example.

Everything put together the JQL identifies issues that have not had any status changes the last two years, and has had no updates the last two years.

I tweak the values -2y to various combinations to explore and do the clean up in chunks. First on -4y (66 issues), then -3y (254 issues), and so on.

For the first pass I bulk add a stale label for all the candidates, and try to weed out anything that seems flat out wrong. It’s easy for others to use a simple query like labels = stale at that point too.

From there I can bulk change all the components that have the stale label.

While we are doing this clean up in preparation of migrating Jira, it is long overdue, and something that we will want to keep doing on a regular schedule in the future so we don’t end up in the same situation again down the line.