Back to All Cheatsheet Libraries cheatsheets

Jira

Keyboard shortcuts, core concepts, and workflow reference for Jira.

Team-managed vs company-managed decides almost everything

Every Jira project is one or the other, and it determines who can change the workflow, whether configuration is shared, and which features exist at all. It is the first thing to check when something you read about isn't where the docs say it is.

Team-managed (formerly next-gen): the project owns its own configuration. Any project admin can edit the workflow, fields, and issue types without touching anyone else. Simple, self-contained, and limited — no shared schemes, and some advanced features are absent.

Company-managed (formerly classic): configuration lives in schemes shared across projects and controlled by Jira admins. Powerful and consistent at scale, but a workflow change can affect dozens of projects, so it's gated behind admin rights.

You cannot convert one into the other. Migrating means bulk-moving issues to a new project and accepting some data loss on fields that don't map.

Concept What it is Notes
IssueThe atomic unit — a task, bug, story, whatever your scheme defines.Everything in Jira is an issue. The key (PROJ-123) is permanent and never reused.
Issue typeStory, Bug, Task, Sub-task, Epic.Types can have different workflows and fields. Keep the list short — sprawl here makes reporting useless.
EpicA container for related issues.In company-managed projects this is a real hierarchy level; higher levels need Jira Premium.
Sub-taskA child of a single issue.Cannot exist independently, and cannot be moved between sprints separately from its parent.
WorkflowThe statuses an issue moves through and the transitions between them.Company-managed workflows are shared — editing one can affect many projects.
Status vs resolutionWhere it is, versus how it ended.The most misunderstood pair in Jira. See the Gotchas tab — this one causes real reporting damage.
BoardA view over issues returned by a filter.A board is not a project. One board can span projects; one project can have many boards.
SprintA timeboxed set of issues on a Scrum board.Scrum boards only. Kanban boards have no sprints.
ComponentA project-level subdivision.Can auto-assign a default assignee — handy and frequently forgotten.
Version / fixVersionA release marker.Drives release reports and the Releases page. Worth using even without formal releases.
FilterA saved JQL query.Backs boards, dashboards, and subscriptions. Share it, or others see an empty board.

JQL is the skill that separates Jira users

Everything worth doing in Jira runs on a JQL query — boards, dashboards, bulk edits, automation, and subscriptions. Learning it properly takes an afternoon and pays back permanently.

It is not SQL. There is no SELECT; a query is just the filter clause, evaluated over issues.

# The everyday one — your open work, most recently updated first assignee = currentUser() AND resolution = Unresolved ORDER BY updated DESC # Everything in the active sprint on a project project = PROJ AND sprint IN openSprints() # Untriaged: no assignee, no epic, created this week project = PROJ AND assignee IS EMPTY AND "Epic Link" IS EMPTY AND created >= -7d # Stale — nothing has happened in a fortnight project = PROJ AND resolution = Unresolved AND updated <= -14d ORDER BY updated ASC # Things you touched, whether or not they're assigned to you issueFunction IN commented("by currentUser() after -7d") # needs ScriptRunner was assignee = currentUser() # built-in history search # Released in a version project = PROJ AND fixVersion = "2.4.0" AND resolution = Done # Multiple projects, specific types, ordered by priority project IN (PROJ, OPS) AND type IN (Bug, Incident) AND priority IN (Highest, High) ORDER BY priority DESC, created ASC # Text search across summary, description, and comments text ~ "timeout" AND project = PROJ # Exact phrase vs fuzzy — ~ is fuzzy, quotes make it a phrase summary ~ "\"connection refused\"" # Issues linked to a specific issue issue IN linkedIssues("PROJ-123") # Everything in an epic (company-managed) "Epic Link" = PROJ-100 # Team-managed uses parent instead parent = PROJ-100 # Change history — moved to Done in the last day, by anyone status CHANGED TO Done AFTER -1d # Never touched since creation created = updated
Group Syntax Notes
Operators= != > < >= <=Standard comparison.
OperatorsIN / NOT INSet membership: status IN (Open, "In Progress").
Operators~ / !~Fuzzy text match. Quote inside quotes for an exact phrase.
OperatorsIS EMPTY / IS NOT EMPTYUse this for null checks — = null also works but reads worse.
OperatorsWAS / CHANGEDSearches issue history, not current state. Genuinely powerful and underused.
FunctionscurrentUser()Makes a filter reusable by everyone rather than hardcoding a name.
FunctionsopenSprints() / closedSprints() / futureSprints()Sprint state without naming a sprint.
FunctionsstartOfWeek() endOfMonth() now()Relative dates that keep a saved filter correct forever.
FunctionsmembersOf("group-name")Everyone in a group — for team-wide filters.
FunctionslinkedIssues("KEY")Follows issue links.
Dates-7d -2w -1M 4hRelative offsets. Prefer these over absolute dates so filters don't rot.
OrderORDER BY rank ASCBoard ordering. Always put ORDER BY last.
Group Action Shortcut
GlobalShow every shortcut?
GlobalCreate issueC
GlobalQuick search/
GlobalGo to a projectG then P
GlobalGo to your dashboardG then D
GlobalGo to issue navigatorG then I
IssueAssign to meI
IssueAssign to someoneA
IssueCommentM
IssueEdit issueE
IssueEdit a single field inlineClick it, or , for label
IssueWatch / unwatchW
IssueVoteV
IssueShare issueS
IssueCopy issue linkY then L
NavNext / previous issue in resultsJ / K
NavOpen the selected issueO or Enter
NavFocus the JQL / search boxQ
BoardMove selected issue between columnsArrow keys with issue selected
EditorSubmit comment⌘/Ctrl + Enter
EditorMention someone@
EditorLink an issue inlineType the issue key
EditorCode block``` then Enter

Automation rules replace most manual chores

Project settings → Automation. Free on every plan with a monthly execution limit, and it removes an enormous amount of routine clicking. Every rule is trigger → condition → action.

1

Auto-assign on transition

Trigger: issue transitioned to In Progress. Condition: assignee is empty. Action: assign to the user who triggered the event. Removes the "who's actually doing this" question.

2

Nudge stale issues

Trigger: scheduled, daily, with JQL status = "In Progress" AND updated <= -5d. Action: comment mentioning the assignee. Far better received than a standup interrogation.

3

Close the parent when all sub-tasks are done

Trigger: issue transitioned. Condition: related-issues condition on sub-tasks all matching Done. Action: transition the parent.

4

Sync with pull requests

With the GitHub or Bitbucket integration: trigger on PR merged, transition the issue to Done. Put the issue key in the branch name or PR title and it links automatically.

5

Watch the audit log

Every rule has an audit log showing runs, successes, and failures. A silently failing rule is the classic Jira automation problem — check it after you build anything.

Workflow design
  • Keep statuses few. Every extra status is a column on every board and a category in every report. Five or six is usually plenty.
  • Statuses are global objects in company-managed Jira — creating "In Review" makes it available everywhere, and everyone's list grows.
  • Map every status to the right status category (To Do / In Progress / Done). Boards and reports use the category, not the name.
  • Post-functions run on transition — set a field, assign, fire a webhook. Conditions hide a transition; validators block it with a message.
  • Always set the resolution on transitions into Done, and clear it on transitions back out. This is the single most important workflow rule in Jira.
  • Test workflow changes in a sandbox project first. In company-managed Jira, a scheme change hits every project using it.
Bulk operations
  • Search with JQL, then Tools → Bulk change on the results. Edit, transition, move, or delete up to 1,000 issues.
  • Bulk change is not undoable. Run the JQL and read the count before you commit.
  • Uncheck "send notifications" for large bulk edits, or you'll email hundreds of people.
  • Bulk move between projects can silently drop field values that don't exist in the target. Check the mapping screen carefully.
  • Bulk operations need the Bulk Change global permission, which isn't granted by default.

Gotchas

Status is not resolution — and this one really matters
  • Status is where the issue sits in the workflow. Resolution records how it ended — Done, Won't Do, Duplicate, Cannot Reproduce.
  • An issue with status Done but an empty resolution counts as unresolved in every report, filter, and burndown chart.
  • The reverse is worse: an issue moved back to In Progress that still has a resolution set vanishes from "open work" queries entirely. People lose issues this way for months.
  • Fix: a post-function setting the resolution on every transition into a Done-category status, and one clearing it on every transition out.
  • Never add Resolution to an edit screen — it should only ever be set by a transition. A resolution set at creation makes an issue permanently invisible.
  • Audit with status = Done AND resolution IS EMPTY.
Permissions and visibility
  • A board shows a filter's results. If someone can't see issues on a shared board, the filter isn't shared with them — sharing the board is not enough.
  • Issue security levels hide issues from search entirely, including from admins without the right level. An issue that "disappeared" is often this.
  • Comment restrictions hide individual comments from anyone outside the chosen role or group.
  • Project roles beat groups for permission schemes — they're per-project and don't need a Jira admin to change.
  • Use the Permission Helper in admin settings to answer "why can't this person see this issue".
Other things that catch people
  • Custom field sprawl is the top cause of slow Jira. Every custom field is indexed across every issue. Reuse before creating.
  • Two fields with the same name in different contexts appear identically in JQL and produce baffling results.
  • Sub-tasks don't move between sprints independently of their parent, which breaks sprint planning if you rely on them heavily.
  • Deleting a sprint doesn't delete its issues — they return to the backlog. Deleting a board doesn't delete issues either.
  • Estimation in story points vs hours is a board setting; changing it mid-project makes historical velocity meaningless.
  • An issue key is permanent. Moving an issue between projects changes the key and leaves a redirect, but old links in documents still point to the old one.
  • Jira Cloud and Jira Data Center differ meaningfully in features and admin UI — check which one you're on before following a guide.

Tips

Press ?

The full, context-aware shortcut list. Then learn just three — C to create, I to assign to yourself, / to search — and the rest follow naturally.

Search history with WAS and CHANGED

status CHANGED FROM "In Progress" TO "To Do" finds work that got bounced back. Nothing else surfaces this, and it's often the most interesting question.

Subscribe to a filter

Any saved filter can email you or a group on a schedule. A Monday morning "stale issues" digest costs nothing and replaces a recurring meeting agenda item.

Put the issue key in the branch name

feature/PROJ-123-add-login auto-links commits, branches, and PRs to the issue, and enables PR-triggered transitions.

Board filters can span projects

A board is just a filter plus a layout. One board covering project IN (WEB, API, OPS) gives a genuine team view rather than three separate ones.

Audit before you clean up

status = Done AND resolution IS EMPTY and resolution IS NOT EMPTY AND status != Done both find broken issues. Run them on any Jira you've inherited.

Resources