Ah, the JIRA backlog. 🌀
It’s like that dirty room in your house where you just keep piling on things, hoping one day it will magically organize itself.
Spoiler alert: It won’t. That room will eventually turn into a stinky mess, and your JIRA backlog isn’t far behind.
But fear not! 🦸♂️ You can tame that beast with the help of a few JQL (Jira Query Language) queries. So grab your keyboard and let’s get started.
If you’ve ever looked at your JIRA backlog and felt a sudden urge to scream into the void, you’re not alone.
It’s not just a backlog; it’s a graveyard of forgotten user stories, half-baked ideas, and tasks that somehow survived the apocalypse. 🌋
Over time, your backlog grows like a pet that’s been overfed, bloated, unwieldy, and difficult to manage.
But don’t worry, the power of JQL is here to help you declutter and make sense of the chaos.
Signs your JIRA backlog needs decluttering:
-
You find stories that are older than the last ice age ❄️
-
Your team spends more time scrolling than coding
-
Prioritizing feels like a game of “Where’s Waldo?” 🤷♂️
What can you do?
Here are some handy JQL queries to help you identify and remove obsolete user stories.
Step 1: Find the Fossils 🦕
Old user stories that haven’t been touched in months are likely candidates for deletion or at least a serious rethink.
Action: Run this JQL query to find user stories that haven’t been updated in over a year:
project = "YourProject" AND issuetype = "Story" AND updated <= -52w
Translation: If it hasn’t been updated in a year, it’s probably fossilized.
Step 2: Spot the Duds 🎯
Sometimes, stories are created with great enthusiasm but never actually get started. These duds just sit there, collecting dust.
Action: Use this JQL query to find stories still in “To Do” that were created over 6 months ago:
project = "YourProject" AND issuetype = "Story" AND status = "To Do" AND created <= -26w
Translation: If it’s been sitting in “To Do” for half a year, it’s probably a dud.
Step 3: Hunt the Orphans 👻
Orphans are stories with no assignee and no parent epic. Nobody owns them, and nobody can tell you why they exist. They’re the clutter that makes everything else harder to find.
Action: Surface every unowned, epic-less story:
project = "YourProject" AND issuetype = "Story" AND assignee IS EMPTY AND "Epic Link" IS EMPTY
Translation: If no one owns it and it ladders up to nothing, it doesn’t belong in the active backlog.
Step 4: Catch the Fake Emergencies 🚨
Nothing erodes trust like a backlog full of “High” priority items that haven’t moved in a quarter. If everything’s urgent, nothing is.
Action: Find the high-priority stories that have been quietly ignored:
project = "YourProject" AND priority in (High, Highest) AND status = "To Do" AND updated <= -13w
Translation: A “High” priority nobody has touched in three months isn’t high priority. Re-rank it or kill it.
Step 5: Bulk-Action and Set a Habit 🧹
Now do the actual cleaning. For each list above, open the search results, hit Bulk Change → Edit / Transition issues, and clear them out in one move, close the fossils and duds, assign or archive the orphans, re-rank the fake emergencies.
Then make it stick. Save each query as a JIRA filter and drop them on a dashboard called “Backlog Hygiene”.
Action: Block a recurring 1-hour “backlog gardening” session on the last Friday of each month and run these five queries every time.
A messy backlog isn’t a personal failing, it’s entropy. Stories pile up faster than anyone can groom them.
The fix isn’t willpower, it’s a system: five queries, one hour, once a month. Run it, and your team spends its time building instead of scrolling.
See you next week. 👋🏼