Advanced Jira Queries (JQL) For Software Delivery Mastery
Whether we like it or not, Atlassian Jira is often the tool of choice to run large software projects. It may or may not be your kind of a “pie”, but if you have to use it, it’s at least useful to understand some of the powerful capabilities it provides. Over years, I have come to sincerely appreciate Jira’s support of flexible quering of its data and ability to create powerful dashboards with the use of that data, using a proprietary query language - JQL.
Further in this post, we will list some of the advanced query expressions and JQL examples that have been useful in our experience.
Please note that a lot of examples in this blog post require the presence of Adaptavist Scriptrunner functions, which can be easily installed in SaaS version of Jira, via “Applications” and is a common plugin enabled in self-hosted server addition of Jira, as well.
Project Dependencies: Stories of Specific Kind linked to Epic with Conditions
Let’s say we are analyzing cross-dependencies across projects. More specifically, let’s say
we want to understand regulatory-requirements related dependencies that Shipping has on Billing.
So we want to find all stories with
billing project that are linked to an epic in the Shipping project:
project = BIL AND type = Story AND Component = Regulatory AND issueFunction in issuesInEpics("project = SHIP")
We can also write this query in a more generic way, by reversing subquery and using parentsOf() function:
type = Epic AND project = SHIP AND issueFunction in parentsOf( "project = BIL AND type = Story AND Component = Regulatory" )
This allows to query for any parent/child relationships (e.g. Epic vs Initiative) and not just Story/Epic one.
Bigger Picture: Epics Of Stories Satisfying Specific Condition
In the previous example, we saw two ways of finding stories for certain kind of epics. Let’s say we need the opposite - finding epics of certain kind of stories.
An example of this is if we want to create a high-level view of a release. Let’s assume our teams have a rule that stories must be sized so that they are aligned with release, but sprints can span multiple releases. In such a scenario, it makes sense to assign release (typically: fixVersion in Jira) to stories, but not necessarily to epics.
Question: what are topics addressed in a release? Which can be represented in: what are all the epics that have a closed or in-progress story that has fixVersion of the current release?
Let’s say fixVersion of current release for Billing is BIL_20230605. Then the query we need may look like the following:
project = BIL and type = epic issueFunction in linkedIssuesOf(" type in (Story) and fixVersion = 'BIL_20230605' ")
This JQL should give you all the epics that have at least one story in the specified release (fixVersion). Such view can be very helpful if you want to get a high-level (epic-level) view of work that is in the release, rather then getting bogged-down into the detailed view of stories.