Product managers · problem and fix

How to write Jira tickets with testable acceptance criteria on Mac, step by step

To write Jira tickets with testable acceptance criteria, describe one behavior per line and make each line pass or fail. Add a clear outcome, a short scope, and enough detail that QA can test without asking you what you meant. This page covers the format, Jira setup on a Mac, and a routine you can run this week.

Updated For product managers8 sources

Product manager writing Jira tickets with testable acceptance criteria on a laptop
Writing criteria in the browser, then checking the wording. · Image by elvtimemaster from Pixabay

The short answer

  • Write each acceptance criterion as one behavior that a tester can check with a yes or no answer.
  • Use Given When Then for flows with a trigger. Use plain checklists for rules, limits, and permissions.
  • Write an out of scope section. Most scope arguments start there.
  • Jira Cloud runs in Chrome or Safari on a Mac. Set a description template so the format appears on every new ticket.
  • Rovo can draft criteria in Jira Cloud. Check every line against the design, the data, and what engineering can build.

What vague jira tickets costs you

Rework and repeated questions

Every unclear ticket starts a thread. Developers ask what the rule is, you answer, and then QA asks about the same case later. The same question costs time twice, once in the sprint and again at testing.

Engineers build the wrong thing

When criteria are vague, the developer picks the reading that is easiest to build. The result looks finished, then fails your expectation in review. Fixing it means a second pass on code that is already on a branch.

QA cannot write a test

A tester who cannot write a pass or fail check either guesses or waits. Guessing lets bugs through. Waiting keeps the ticket open. Both push back the release date.

Scope creep during the sprint

A missing out of scope section lets extra work slide in. Someone adds a field, a role, or a report. The sprint gets longer, and the ticket still describes one small piece of work.

Trust with engineering

Teams notice when tickets change after they start. Trust drops, and engineers start asking for a meeting before every ticket. Atlassian's survey reports that 63% of respondents think leaders do not understand their pain points, up from 44%, though it does not link that to tickets.

Why it happens

  1. Time pressure

    NaPiRE respondents named lack of time as one of the most common causes, at 18% of mentions. When a ticket is due Friday, the criteria get one line. The easy line gets written, and the hard edge cases wait for later.

  2. A solution written as the requirement

    Many tickets start with a solution the product manager already picked. The description then describes the button, not the outcome. A tester cannot check a button without knowing what it should let the user do.

  3. Requirements that stay abstract

    NaPiRE found that 13% of organizations reported requirements that remain too abstract as a cause. Words like easy or intuitive pass review but fail testing. Nobody can tell whether the feature met them.

  4. Knowledge that lives in one head

    The writer knows the customer, the earlier decision, and the edge case. Nobody else does. Hidden requirements were the most cited problem in NaPiRE, at 48% of organizations. The rule stays in one person's head until the sprint starts.

  5. Gaps in shared understanding

    Werner and colleagues found that 78% of 41 rework tasks in non-functional requirements came from avoidable gaps in shared understanding. Speed, security, and accessibility often get a vague line and then a surprise at release.

  6. No template and no review step

    A blank description box invites a short description. Without a review step, nobody checks the criteria before work starts. The gap stays hidden until testing finds it.

  7. Criteria written after the build

    Criteria written from finished code describe what was built. They rarely describe what was needed. That is one reason a ticket can pass its own criteria and still miss the user.

How to fix it

These work with or without any app.

  • Write one behavior per line

    Each criterion should describe one thing a user or the system does. If a line joins two behaviors with and, split it. Then ask a tester to answer yes or no for each line.

  • Use Given When Then for flows

    Use it for anything with a trigger and a visible result. Keep the Given short and name only the state that changes the result. Reuse the same wording across tickets so testers recognize the pattern quickly.

  • Replace judgment words with checks

    Swap fast, easy, clean, and intuitive for something a tester can check. Ask what the user sees, how the result shows up, and who can see it. If you cannot name a check, ask engineering what they would measure.

  • Add an out of scope section

    List the adjacent work you are not doing. Name the screen, the role, or the report. This section gives you a sentence to point at when a new request arrives in the middle of a sprint.

  • Set a description template

    In Jira Cloud, use Automation for Jira to add your headings when a work item is created. Or use the Default Values app from the Marketplace if your admin approves it. Keep the headings short, and test on a sandbox project first.

  • Draft with Rovo, then edit

    Use Rovo's option to generate acceptance criteria from your description. Delete any line that has no source. Add the edge cases the draft did not know about, such as expired links or missing permissions.

  • Run a short criteria review

    Read each criterion aloud with one developer and one tester before the sprint. Ask the tester to describe the check. If the check is unclear, rewrite the line on the spot and move on.

  • Keep a criteria library in Notion

    Save your best criteria in Notion, one page per feature area. Link each new ticket to the closest page. Reuse the wording for common rules such as permissions, error messages, and empty states.

  • Measure rework, not feelings

    Count the comments that ask what a ticket meant, and count the tickets reopened after QA. Compare two sprints before and after the change. Those counts tell you more than a general impression of the team.

What makes an acceptance criterion testable

A testable acceptance criterion describes one behavior you can observe. A tester reads it, runs the feature, and answers yes or no. The line 'the page should load quickly' fails that test. Quickly means something different to every person who reads it.

The fix is not a longer sentence. The fix names the starting state, the trigger, and the result. Someone can test that in a few minutes, without a meeting, and without guessing what you meant.

Product manager writing Jira tickets with testable acceptance criteria on a laptop
Writing criteria in the browser, then checking the wording. · Image by elvtimemaster from Pixabay
Vague lines and testable rewrites, with one change each.
Vague lineTestable lineWhat changed
Search should be fastResults appear while the user types, with no refresh buttonReplaces a judgment word with something visible
Export should handle big filesA file with every column exports and opens in Google Sheets without errorsNames the case and the tool to test in
Make the error message clearThe error names the field that failed and shows a valid exampleTurns clear into content a tester can check
Notifications should not be annoyingA user who turns off reminders gets no reminder email after thatReplaces a feeling with a rule

Why vague Jira tickets happen

Vague tickets are common, and they are not a personal failing. In the NaPiRE survey, 48% of 228 organizations named incomplete or hidden requirements as a problem. Another 33% named requirements that were too abstract and allowed several readings.

That survey ran from 2014 to 2015, and it covers requirements work in general, not Jira tickets. Treat it as a pattern. It does not tell you how often your team writes vague lines.

48%

of 228 organizations in the NaPiRE survey named incomplete or hidden requirements as a problem

Naming the Pain in Requirements Engineering (arXiv 1611.10288)

33%

named underspecified requirements that were too abstract and allowed several readings

Naming the Pain in Requirements Engineering (arXiv 1611.10288)

78%

of 41 non-functional requirement rework tasks came from avoidable gaps in shared understanding

The Lack of Shared Understanding of Non-Functional Requirements in Continuous Software Engineering (arXiv 2007.01761)

90%

of 3,500 developers and managers in Atlassian's 2025 survey lose 6 or more hours a week to non-coding work. Vendor-run survey.

Atlassian research: AI adoption is rising, but friction persists

A second study looked at non-functional requirements, such as speed, security, and accessibility. Its authors found that 78% of 41 rework tasks came from avoidable gaps in shared understanding. Those gaps were avoidable, not bad luck.

Be careful with the claim that a bug costs far more to fix late. A 2016 study of 171 projects found no evidence for that delayed-issue effect. You do not need that claim to justify better tickets. Count the rework in your own sprint comments instead.

How to structure a Jira ticket with acceptance criteria

A ticket that holds up under testing has a few clear parts. Each part answers a question that a developer or tester would otherwise ask you in Slack. Write them in this order, and keep the headings short.

  1. Outcome: why this work exists, in one sentence a customer would recognize.
  2. Scope: the user, the screen, and the rule that changes.
  3. Acceptance criteria: observable behaviors, written as a checklist.
  4. Out of scope: what the team should not build in this ticket.
  5. Test notes: sample data, roles, and the edge cases that worry you most.

Coverage matters more than the exact order. Skip a part and someone will ask about it later. The part people skip most is out of scope. Without it, the criteria grow during the sprint, one reasonable request at a time.

Given When Then acceptance criteria, and when to skip them

Given When Then is a format for behavior. Given sets the starting state. When names the action. Then names the result you can see. It works well for flows that have a trigger, such as password reset or checkout.

Given a user has requested a password reset, when they open the link after it expires, then they see a message that the link is no longer valid and can request a new one.

Plain checklists work better for rules and limits. Examples include which roles can export data, or which fields are required on a form. Forcing those rules into Given When Then makes them longer, not clearer.

Pick one style per ticket and keep it. Mixing styles in one list makes testers slow down to decode the format. Consistency is easier to keep when the same template holds the headings.

A worked example of rewriting a vague Jira ticket

Start with a ticket most teams have seen. The title says Improve password reset. The description says users find the process confusing and support gets too many emails. Nothing in that text lets a tester say pass or fail.

Rewrite it by asking what the user sees and what the system stores. Then list the states that exist. A registered user, an unknown email, an expired link, a used link, and a double click each need an answer. Each answer becomes one line.

  • Given a registered email, when the user requests a reset, then they receive one email with a link.
  • Given a link older than the expiry window, when the user opens it, then they see an expired-link message and a button to request a new link.
  • Given an email that is not registered, when the user requests a reset, then the page shows the same confirmation as for a registered email.
  • Given a link that was already used, when the user opens it, then the new password form does not appear.
  • Out of scope: changes to the email template and to the sign-in page.

The third line is the one most people miss. It stops the reset page from revealing which emails have accounts. Ask your engineering lead to confirm the wording, because the product owns the behavior while engineering owns the security review.

Set up a Jira description template on Mac

Jira Cloud runs in your browser, so Mac users work in Chrome or Safari. Atlassian says support has ended for the Jira Cloud for Mac app, and version 148 is the final update. Open your board in the browser, then press ⌘ D to bookmark it.

A template keeps the format in front of you each time you create a ticket. Atlassian describes two methods for a default description in Jira Cloud. The first uses Automation for Jira, with a rule that runs when a work item is created.

That rule sets the description to the existing text plus your template, using the {{issue.description}} placeholder. The second method is the third-party Default Values app from the Atlassian Marketplace. It pre-fills the description on the create screen.

Check with your Jira admin before you install any app, because your company may limit what can be added. Atlassian's article applies to Cloud only. It does not say which project types each method supports, so test in a sandbox project first.

  1. Ask your Jira admin which method your site allows.
  2. Use a sandbox project that nobody else uses for real work.
  3. Add the rule or app setting that puts your headings in the description.
  4. Create a ticket and confirm the headings appear in the description box.
  5. Edit the ticket and confirm your text is kept, not replaced.
  6. Delete the sandbox project when the test is done.

Use Rovo to generate acceptance criteria in Jira, then check them

Atlassian's Rovo can generate acceptance criteria from a work item description. Open the description editor and use the Rovo icon, or type /rovo or /ai. Then choose the option to generate acceptance criteria from the work item description.

The generated text can be edited like any other text. Atlassian's support page does not say which plans or access levels include this action. Confirm it on your site before you plan a rollout.

Treat the output as a first draft. Check every generated line against the design, the data, and what engineering can build. A draft can invent a limit or a role that nobody agreed on. Delete any line you cannot trace to a source.

Review the criteria with engineering and QA before the sprint

A short review catches many gaps before work starts. Read each criterion aloud with one developer and one tester. Ask the tester how they would check it. If the tester pauses, the line is not ready.

Product manager and developers reviewing acceptance criteria at a whiteboard
A short review catches gaps before the sprint starts. · Image by 425147 from Pixabay

The review should stay on the criteria, not the solution. The developer can propose the approach later. Keep the meeting short, and keep a note of each rewrite so the same gap does not come back.

  • Judgment words like fast, easy, clean, or intuitive, with no check attached.
  • Criteria that describe a task, such as build the table, instead of a behavior.
  • No out of scope section, or one that says nothing useful.
  • Criteria added after the work started, without a note on why.
  • One ticket that describes several separate features.

Common mistakes with acceptance criteria in Jira

The first mistake is writing the solution as the criterion. The line 'Add a dropdown' tells engineering what to build, but not what a user should be able to do. Describe the result, then let engineering pick the control.

The second mistake is writing criteria after the build. Criteria written from finished code tend to describe what was built. Write them first, then ask whether the build matches them.

The third mistake is copying criteria between tickets. Two tickets can look alike and differ in one rule. A copied line carries the wrong rule into the second ticket, and nobody notices until testing.

The fourth mistake is skipping edge cases because they feel minor. Edge cases generate many of the support questions after release. Ask what happens with empty input, missing permission, and a dropped connection.

Where Lazur helps with ticket writing, and where it does not

Lazur is a voice assistant for the Mac. Hold a key and talk. It sees your screen only while you hold the shortcut, and it answers out loud. It can point at things, guide you one click at a time, and type drafts at your cursor.

It does not click buttons for you, edit Jira, or write into your ticket on its own. You still paste, save, and review. Hold ⌥⌘ to ask about anything on screen. Hold fn to dictate clean text at the cursor in any app.

Person typing ticket descriptions at a desk with a Mac laptop
Typing or dictating, the criteria still need a line by line check. · Image by Pexels from Pixabay

Dictation suits ticket writing, because you can speak the outcome, the users, and the edge cases faster than you type them. Then edit the words yourself. Dictation can mishear product names, so check feature names and rule wording.

For confusing text, hold ⌥⌘ over the criterion and ask Lazur to explain it in plain words. For a first draft from your notes, ask it to draft criteria. Check every line before you paste it into Jira.

Privacy matters when tickets hold customer details or unreleased plans. Lazur sends audio and the screenshot to AI providers to answer, and they are not stored. Content is never used to train AI models. If your employer limits where work data can go, follow that rule first.

What the evidence on vague tickets does not show

The research base is thinner than the advice. The NaPiRE figures come from 2014 and 2015. The Atlassian survey is run by a vendor and measures general non-coding friction, not ticket quality.

That survey reports that 90% of respondents lose 6 or more hours a week to non-coding work. The same report says 63% of respondents think leaders do not understand their pain points, up from 44% in 2024. Those figures do not show that vague tickets cause either problem.

No controlled study found here shows that acceptance-criteria formats or templates reduce rework. The fixes in this guide are working habits, not proven methods. Measure your own sprints before and after you change anything.

What to do next

Pick one ticket from this week and rewrite its criteria with the format above. Then run the short review before the next refinement. For the wider routine, read how product managers use Slack and Notion for PRD workflows.

Faster with Lazur

Where Lazur helps with vague jira tickets

Hold ⌥ ⌘ and say what you want. Lazur sees your Notion window. Lazur reads what's on screen and writes the draft at your cursor for you to check.

  • 1

    Hold ⌥⌘ and talk

  • 2

    Lazur reads what's on screen and writes the draft at your cursor for you to check.

  • 3

    You stay in Notion. Nothing to copy into a chat window.

More things to say in Notion

  • “Lazur, explain this acceptance criterion in plain words.”
  • “Lazur, where is the description field on this ticket?”
  • “Lazur, walk me through adding a description template.”
  • “Hold fn and speak the outcome, the users, and the edge cases.”
  • “Lazur, draft acceptance criteria from these notes.”
  • “Lazur, find how other teams write criteria for password reset.”

Free for 3 days, then $18/month. Download for Mac

You say“Lazur, draft Given When Then criteria for this ticket.”

Lazur · drafts itLazur types the draft at the cursor. You read each line against the design before you keep it.

Notion
FileEditInsertFormatTools

Draft at your cursor

Given a registered email, when the user requests a reset, then they receive one email with a link.

What product managers say to Lazur for this

Each one is a single hold of ⌥ ⌘.

  • “Lazur, explain this acceptance criterion in plain words.”

    Hold ⌥⌘ with the ticket open. Lazur reads the line on screen and answers out loud, so you can test your own wording.

    Explains what's on screen

  • “Lazur, where is the description field on this ticket?”

    Lazur draws a circle and a label around the field. You still click it yourself.

    Points at it

  • “Lazur, walk me through adding a description template.”

    Lazur guides you one click at a time and waits for each click. It does not click for you.

    Walks you through it

  • “Hold fn and speak the outcome, the users, and the edge cases.”

    Dictation writes clean text at the cursor in any app. Check product names and rule wording before you save the ticket.

    Types what you say

  • “Lazur, draft acceptance criteria from these notes.”

    Lazur types a draft at your cursor. Read every line against the design and the data before you keep it.

    Drafts it

  • “Lazur, find how other teams write criteria for password reset.”

    Research runs in Lazur's own Chrome tabs and comes back with a summary and a report. Check the sources before you copy any wording.

    Researches in the background

A plan you can start this week

  1. Day 1

    Read one ticket aloud

    Choose a ticket already in the sprint. Read each criterion aloud. Mark every judgment word, such as easy or fast. Write down the question a developer asked you last week about that ticket.

  2. Day 2

    Rewrite the criteria

    Use Given When Then for flows and a checklist for rules. Add an out of scope section. Name the edge cases, such as expired links, unknown users, and repeated clicks. Keep the wording plain.

  3. Day 3

    Set up the template

    Ask your Jira admin which method your site allows. Test the template in a sandbox project. Confirm the headings appear on a new ticket and that your text survives an edit.

  4. Day 4

    Run the review

    Book a short slot with one developer and one tester. Read each criterion aloud, and ask the tester how they would check it. Rewrite any line that gets a pause.

  5. Day 5

    Count and compare

    Note how many comments asked what a ticket meant this week. Compare that count with the week before. Keep the template if the count falls. Change the format if it does not.

Questions people ask

What is an acceptance criterion in a Jira ticket?

An acceptance criterion is a condition the work must meet before the team calls it done. Most teams write them in the description, under a heading such as Acceptance criteria. Atlassian describes a work item as the basic unit of tracking, such as a bug, a task, or a request, so you may see both terms.

Should every ticket use Given When Then?

No. Use it for flows that have a trigger and a visible result, such as sign-in or password reset. Use a plain checklist for rules and limits. Keep one style inside each ticket so testers do not have to switch formats.

How many acceptance criteria belong in one ticket?

Enough to cover the behavior, and no more. If the list keeps growing, the ticket is probably two tickets. Split it, give each part its own outcome, and write an out of scope note for each part.

Is there a Jira app for Mac I can use?

Not for Jira Cloud. Atlassian's support page says support has ended for the Jira Cloud for Mac app, and version 148 is the final update. Use Jira in Chrome or Safari, and bookmark the board you use most with ⌘ D.

Does Rovo write good acceptance criteria?

It can produce a useful first draft when the description already has clear context. It can also invent rules. Check each line against the design, the data, and engineering's view. Atlassian's page does not state plan requirements, so confirm access on your site.

Can I use Lazur on tickets that contain customer data?

Follow your employer's rules first. Lazur sends audio and the screenshot to AI providers to answer your question, and they are not stored. Content is never used to train AI models. If your company bans AI tools for customer data, skip Lazur on those tickets.

Do testable criteria replace QA?

No. Testable criteria make QA faster and clearer. Testers still explore the product, look at edges nobody wrote down, and check how the change fits the wider product. The criteria set the minimum the team agrees on.

What if engineering says the criteria are too detailed?

Ask what they would change. Often the detail is the value, because it removes guessing. If the criteria describe a solution, move that to a technical note and keep the behavior in the criteria.

Sources

  1. Naming the Pain in Requirements Engineering (arXiv 1611.10288) · arXiv · checked 2026-11-08
  2. The Lack of Shared Understanding of Non-Functional Requirements in Continuous Software Engineering (arXiv 2007.01761) · arXiv · checked 2026-11-08
  3. Are Delayed Issues Harder to Resolve? Revisiting Cost-to-Fix of Defects throughout the Lifecycle (arXiv 1609.04886) · arXiv · checked 2026-11-08
  4. Atlassian research: AI adoption is rising, but friction persists · Atlassian · checked 2026-11-08
  5. What's new in Jira Cloud for macOS · Atlassian Support · checked 2026-11-08
  6. How to set a default description template for an issue type in Jira Cloud · Atlassian Support · checked 2026-11-08
  7. Use Rovo to help write or edit content · Atlassian Support · checked 2026-11-08
  8. What is a work item? · Atlassian Support · checked 2026-11-08

Fix vague jira tickets with Lazur, free for 3 days

Hold a key and ask. Lazur sees your screen, points at the button and talks you through it, in any Mac app. No credit card.