JQL for TPMs: A Primer for TPMs

In today’s fast-paced software development environments, Technical Program Managers (TPMs) are tasked with overseeing complex projects that span multiple teams, timelines, and deliverables. Efficiently tracking progress, identifying bottlenecks, and ensuring alignment across various stakeholders are critical responsibilities. Jira, a widely adopted project management tool, offers robust capabilities to manage these tasks. However, as projects grow in complexity, so does the challenge of extracting meaningful insights from the vast amount of data within Jira.
Enter Jira Query Language (JQL), a powerful tool that allows TPMs to perform advanced searches, create dynamic filters, and generate insightful reports. This guide aims to provide a thorough understanding of JQL, enabling TPMs to harness its full potential for effective project management
Understanding Jira Query Language (JQL)
Jira Query Language (JQL) is a structured query language designed specifically for Jira. It enables users to create precise and flexible queries to search for issues within Jira. Unlike basic search functionalities, JQL allows for complex queries that can filter issues based on various criteria, such as project, status, assignee, date ranges, and custom fields.
Why Should TPMs Use JQL?
For TPMs, JQL offers several advantages:
- Advanced Filtering: Quickly identify issues that meet specific criteria across multiple projects.
- Custom Dashboards: Create dynamic dashboards that reflect real-time project statuses.
- Efficient Reporting: Generate reports that provide insights into team performance, project progress, and potential risks.
- Automation: Integrate JQL queries into automation rules to streamline workflows.
Learning the Basic Commands
A JQL query consists of the following components:
Fields
Fields represent the attributes of an issue, such as:
- project
- status
- assignee
- reporter
- priority
- created
- updated
- due
- resolution
Operators
Operators define the relationship between fields and their values:
=
: Equal to!=
: Not equal to>
: Greater than<
: Less than>=
: Greater than or equal to<=
: Less than or equal toIN
: Matches any value in a listNOT IN
: Does not match any value in a listIS
: Used with NULL or EMPTYIS NOT
: Used with NULL or EMPTY~
: Contains (used for text fields)!~
: Does not contain
Keywords
Keywords help in combining or modifying clauses:
AND
: Both conditions must be trueOR
: At least one condition must be trueORDER BY
: Sorts the results
Functions
Functions perform calculations or return dynamic values:
currentUser()
: Returns the currently logged-in usernow()
: Returns the current date and timestartOfDay(), endOfDay()
: Start or end of the current daystartOfWeek(), endOfWeek()
: Start or end of the current weekmembersOf("group")
: Returns all users in a specified group
Constructing Basic JQL Queries
Simple Query
To find all issues in the “Website” project:
project = "Website"
Combining Conditions
To find all open issues assigned to the current user:
assignee = currentUser() AND status = "Open"
Using Lists
To find issues with high or critical priority:
priority IN ("High", "Critical")
Text Search
To find issues containing the word “login” in the summary:
summary ~ "login"
Advanced JQL Techniques
To find issues created in the last 7 days:
created >= -7d
To find issues updated between two dates:
updated >= "2025-05-01" AND updated <= "2025-05-31"
Searching by User Groups
To find issues assigned to members of the “Developers” group:
assignee IN membersOf("Developers")
=
Filtering by Custom Fields
"Customer Impact" = "High"
Sorting Results
To sort issues by creation date in descending order:
project = "Website" ORDER BY created DESC
Practical JQL Examples for TPMs
Tracking Blocked Issues
Identify all issues currently marked as blocked:
status = "Blocked"
Monitoring Overdue Tasks
Find all unresolved issues past their due date:
due < now() AND resolution = Unresolved
Evaluating Sprint Progress
Retrieve all issues in the current sprint for the “Mobile App” project:
project = "Mobile App" AND sprint IN openSprints()
Identifying Recently Created Bugs
Find all bugs created in the last 14 days:
issuetype = Bug AND created >= -14d
Integrating JQL into Jira Workflows
Creating Filters
After constructing a JQL query, you can save it as a filter for future use:
- Navigate to Issues > Search for Issues.
- Switch to Advanced Search.
- Enter your JQL query.
- Click on Save As and provide a name for your filter.
Building Dashboards
Use saved filters to create dynamic dashboards:
- Go to Dashboards > Create Dashboard.
- Add gadgets like Filter Results, Pie Chart, or Two-Dimensional Filter Statistics.
- Configure each gadget to use your saved filters.
Automating Workflows
Integrate JQL into automation rules:
- Navigate to Project Settings > Automation.
- Create a new rule and set a trigger (e.g., issue created).
- Add a condition using JQL to refine the rule’s scope.
- Define the action to be taken when conditions are met.
Best Practices for Using JQL
- Be Specific: Use precise criteria to avoid overwhelming result sets.
- Use Parentheses: Group conditions logically to ensure accurate results.
- Leverage Functions: Utilize built-in functions like currentUser() and now() for dynamic queries.
- Test Queries: Validate your JQL queries to ensure they return expected results.
- Document Filters: Provide clear names and descriptions for saved filters to facilitate collaboration.