Keyboard shortcuts, core concepts, and workflow reference for Jira.
| Concept | What it is | Notes |
|---|---|---|
| Issue | The 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 type | Story, Bug, Task, Sub-task, Epic. | Types can have different workflows and fields. Keep the list short — sprawl here makes reporting useless. |
| Epic | A container for related issues. | In company-managed projects this is a real hierarchy level; higher levels need Jira Premium. |
| Sub-task | A child of a single issue. | Cannot exist independently, and cannot be moved between sprints separately from its parent. |
| Workflow | The statuses an issue moves through and the transitions between them. | Company-managed workflows are shared — editing one can affect many projects. |
| Status vs resolution | Where it is, versus how it ended. | The most misunderstood pair in Jira. See the Gotchas tab — this one causes real reporting damage. |
| Board | A view over issues returned by a filter. | A board is not a project. One board can span projects; one project can have many boards. |
| Sprint | A timeboxed set of issues on a Scrum board. | Scrum boards only. Kanban boards have no sprints. |
| Component | A project-level subdivision. | Can auto-assign a default assignee — handy and frequently forgotten. |
| Version / fixVersion | A release marker. | Drives release reports and the Releases page. Worth using even without formal releases. |
| Filter | A saved JQL query. | Backs boards, dashboards, and subscriptions. Share it, or others see an empty board. |
| Group | Syntax | Notes |
|---|---|---|
| Operators | = != > < >= <= | Standard comparison. |
| Operators | IN / NOT IN | Set membership: status IN (Open, "In Progress"). |
| Operators | ~ / !~ | Fuzzy text match. Quote inside quotes for an exact phrase. |
| Operators | IS EMPTY / IS NOT EMPTY | Use this for null checks — = null also works but reads worse. |
| Operators | WAS / CHANGED | Searches issue history, not current state. Genuinely powerful and underused. |
| Functions | currentUser() | Makes a filter reusable by everyone rather than hardcoding a name. |
| Functions | openSprints() / closedSprints() / futureSprints() | Sprint state without naming a sprint. |
| Functions | startOfWeek() endOfMonth() now() | Relative dates that keep a saved filter correct forever. |
| Functions | membersOf("group-name") | Everyone in a group — for team-wide filters. |
| Functions | linkedIssues("KEY") | Follows issue links. |
| Dates | -7d -2w -1M 4h | Relative offsets. Prefer these over absolute dates so filters don't rot. |
| Order | ORDER BY rank ASC | Board ordering. Always put ORDER BY last. |
| Group | Action | Shortcut |
|---|---|---|
| Global | Show every shortcut | ? |
| Global | Create issue | C |
| Global | Quick search | / |
| Global | Go to a project | G then P |
| Global | Go to your dashboard | G then D |
| Global | Go to issue navigator | G then I |
| Issue | Assign to me | I |
| Issue | Assign to someone | A |
| Issue | Comment | M |
| Issue | Edit issue | E |
| Issue | Edit a single field inline | Click it, or , for label |
| Issue | Watch / unwatch | W |
| Issue | Vote | V |
| Issue | Share issue | S |
| Issue | Copy issue link | Y then L |
| Nav | Next / previous issue in results | J / K |
| Nav | Open the selected issue | O or Enter |
| Nav | Focus the JQL / search box | Q |
| Board | Move selected issue between columns | Arrow keys with issue selected |
| Editor | Submit comment | ⌘/Ctrl + Enter |
| Editor | Mention someone | @ |
| Editor | Link an issue inline | Type the issue key |
| Editor | Code block | ``` then Enter |
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.
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.
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.
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.
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.
- 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.
- 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 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.
- 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".
- 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
?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.
WAS and CHANGEDstatus 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.
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.
feature/PROJ-123-add-login auto-links commits, branches, and PRs to the issue, and enables PR-triggered transitions.
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.
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.