JQL for TPMs: A Primer for TPMs

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 to
  • IN : Matches any value in a list
  • NOT IN : Does not match any value in a list
  • IS : Used with NULL or EMPTY
  • IS 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 true
  • OR : At least one condition must be true
  • ORDER BY : Sorts the results 

Functions

Functions perform calculations or return dynamic values: 

  • currentUser() : Returns the currently logged-in user
  • now() : Returns the current date and time
  • startOfDay(), endOfDay() : Start or end of the current day
  • startOfWeek(), endOfWeek() : Start or end of the current week
  • membersOf("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")

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:

  1. Navigate to Issues > Search for Issues.
  2. Switch to Advanced Search.
  3. Enter your JQL query.
  4. Click on Save As and provide a name for your filter.

Building Dashboards

Use saved filters to create dynamic dashboards: 

  1. Go to Dashboards > Create Dashboard.
  2. Add gadgets like Filter ResultsPie Chart, or Two-Dimensional Filter Statistics.
  3. Configure each gadget to use your saved filters. 

Automating Workflows

Integrate JQL into automation rules:

  1. Navigate to Project Settings > Automation.
  2. Create a new rule and set a trigger (e.g., issue created).
  3. Add a condition using JQL to refine the rule’s scope.
  4. 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.