Jira Bug Report Template: Complete Guide with Examples (2026)
A good Jira bug report is the difference between a fix that takes 30 minutes and a back-and-forth that takes 3 days. When developers receive "login doesn't work," they spend more time investigating than fixing. A complete bug report eliminates that ambiguity entirely.
This guide covers everything you need to write professional Jira bug reports: the essential fields, copy-paste templates, severity guidelines, real examples, and how to automate the entire process.
The Complete Jira Bug Report Template
Copy this template and create a Jira issue type called "Bug" with these fields:
Summary: [Component] + [what broke] + [trigger condition]
Environment:
- Browser: [Chrome 121, Firefox 122, Safari 17]
- OS: [macOS 14, Windows 11, Ubuntu 22]
- URL: [https://app.example.com/path]
- User Role: [Admin / Standard User / Guest]
- Environment: [Production / Staging / Dev]
Steps to Reproduce:
1. [First action — start from a known state]
2. [Subsequent actions — be specific]
3. [Action that triggers the bug]
Expected Result:
[What should happen based on requirements or normal behavior]
Actual Result:
[What actually happened — include error messages, status codes]
Severity: [Critical / High / Medium / Low]
Priority: [P1 / P2 / P3 / P4]
Root Cause Hypothesis:
[Optional — if you have a theory about why this happened]
Console Errors:
[Copy error messages from browser DevTools → Console]
Network Issues:
[Failed requests: URL, method, status code, response body]
Attachments:
[Screenshots, GIF recording, HAR file]
How to Fill Each Field
Summary (Bug Title)
The summary is the most-read field in Jira. Write it so developers immediately know what broke without reading the rest.
Formula: [Component] [what broke] [trigger condition]
| Bad | Good | |---|---| | Login broken | POST /api/auth/login returns 500 with valid credentials | | Button not working | "Add to cart" button unresponsive on product page when user is logged out | | Error on checkout | Checkout fails with "undefined" error when applying promo code | | CSS issue | Product image overlaps price text on mobile viewport under 375px |
Keep it under 80 characters. Be specific enough that it's distinguishable from similar bugs.
Environment
Developers can't reproduce a bug without knowing where it happened.
Browser: Chrome 121.0.6167.160 (64-bit)
OS: macOS 14.2.1
URL: https://app.example.com/checkout
User role: Standard user (not admin)
Environment: Production
Screen resolution: 1440×900
For mobile bugs, add:
Device: iPhone 15 Pro
iOS: 17.2
Browser: Safari Mobile
Steps to Reproduce
The most important section. Number every step. Start from a known state. Be precise about what you click, type, or select.
Rules:
- Start with navigation ("Navigate to...")
- Include exact values you type ("Enter 'user@example.com'")
- Specify which button/link/element you interact with
- One action per step
- Include any prerequisite state ("While logged in as standard user")
Example — good steps:
1. Navigate to https://app.example.com/login
2. Click "Sign in with Google"
3. Select the test account (test.user@gmail.com)
4. After redirect, navigate to https://app.example.com/settings/billing
5. Click "Upgrade to Pro"
6. Select the "Monthly" billing option
7. Click "Proceed to checkout"
Example — bad steps:
1. Log in
2. Go to billing
3. Try to upgrade
The bad version forces the developer to guess every detail.
Expected vs. Actual Result
Write these as a pair. The contrast between expected and actual defines the bug.
Expected result:
After clicking "Upgrade to Pro," user is redirected to the Stripe checkout page at
/checkoutwith the correct plan pre-selected.
Actual result:
The page redirects to
/checkoutbut shows a blank white screen. Browser console shows:TypeError: Cannot read property 'id' of undefined at CheckoutPage.js:47. Network tab showsGET /api/plans/undefined 404 (Not Found).
Include error messages verbatim. Include HTTP status codes. Include the exact URL if it changed unexpectedly.
Severity vs. Priority
These are different concepts and both matter in Jira.
Severity = how bad is the impact on the user
| Severity | Definition | Example | |---|---|---| | Critical | Data loss, security breach, app crash, complete feature failure | Login completely broken for all users | | High | Core feature broken, no workaround | File upload returns error, can't upload anything | | Medium | Feature degraded, workaround exists | Export to PDF works but Excel export fails | | Low | Cosmetic, minor annoyance, no functional impact | Button text is slightly misaligned on Firefox |
Priority = when should this be fixed
| Priority | Definition | |---|---| | P1 | Fix immediately, blocks current sprint or release | | P2 | Fix this sprint | | P3 | Fix in next sprint | | P4 | Fix when convenient, tracked but not urgent |
A Critical severity bug might be P2 if it only affects beta users. A Medium severity bug might be P1 if it blocks a major customer demo.
Console Errors
Open browser DevTools (F12) → Console tab before reproducing the bug. Copy the full error including the stack trace.
TypeError: Cannot read properties of undefined (reading 'userId')
at ProfilePage.componentDidMount (ProfilePage.js:52:34)
at commitLifeCycles (react-dom.development.js:20663:22)
If no console errors appear, note that explicitly: No console errors observed.
Network Issues
Open DevTools → Network tab. Filter for failed requests (4xx, 5xx status codes).
POST /api/users/profile/update → 422 Unprocessable Entity (340ms)
Request payload: {"name": "John Doe", "avatar": [object File]}
Response body: {"error": "avatar_too_large", "maxSize": "2MB", "received": "4.3MB"}
This level of detail lets developers reproduce the exact server-side error without guesswork.
5 Complete Bug Report Examples
Example 1: Authentication Bug
Summary: Google OAuth login redirects to /undefined instead of /dashboard
Environment: Chrome 121, macOS 14.2, Production, Standard user account
Steps to Reproduce:
1. Navigate to https://app.example.com/login
2. Click "Continue with Google"
3. Select any Google account in the OAuth popup
4. Click "Allow" to grant permissions
Expected Result:
User is redirected to /dashboard with session established.
Actual Result:
User is redirected to /undefined/dashboard — a 404 page.
Console: Uncaught TypeError: Cannot read property 'next' of undefined
Network: GET /api/auth/session → 200 (session exists, user is authenticated)
Severity: High
Priority: P1
Notes: Affects all Google OAuth logins. Email/password login works correctly.
Example 2: Data Integrity Bug
Summary: CSV export includes deleted records when date filter is applied
Environment: Chrome 121, Windows 11, Production, Admin user
Steps to Reproduce:
1. Log in as admin
2. Navigate to /admin/users
3. Apply date filter: "Created after: Jan 1, 2026"
4. Click "Export to CSV"
5. Open the downloaded CSV file
Expected Result:
CSV contains only users created after January 1, 2026,
and only active (non-deleted) users.
Actual Result:
CSV includes 23 deleted users (marked with is_deleted: true in the database).
Date filter is applied correctly but soft-deleted records are not excluded.
Severity: High
Priority: P2
Reproduction rate: 100% — reproducible every time with any date filter.
Example 3: UI/Layout Bug
Summary: Login button hidden behind keyboard on mobile (iOS Safari)
Environment: iPhone 14, iOS 17.1, Safari, Production
Steps to Reproduce:
1. Open https://app.example.com/login on iPhone Safari
2. Tap the "Email" input field
3. Type any text (keyboard appears)
4. Attempt to tap the "Sign In" button
Expected Result:
Page scrolls to keep the Sign In button visible above the keyboard.
Actual Result:
The Sign In button is hidden behind the iOS keyboard.
No way to submit the form without dismissing the keyboard first.
Severity: Medium
Priority: P2
Workaround: Dismiss keyboard by tapping elsewhere, then tap Sign In.
Affects: All iOS users on login page.
Example 4: Performance Bug
Summary: Dashboard takes 8-12 seconds to load with more than 100 projects
Environment: Chrome 121, macOS 14.2, Production, Account with 150+ projects
Steps to Reproduce:
1. Log in with account test+perf@example.com (has 158 projects)
2. Navigate to /dashboard
3. Measure time until all projects are visible
Expected Result:
Dashboard loads within 2 seconds.
Actual Result:
Dashboard takes 8-12 seconds on first load.
Network: GET /api/projects → 8.4s (fetching all 158 projects, no pagination)
Response size: 2.3MB JSON
Severity: Medium
Priority: P2
Notes: Accounts with <50 projects load in <1 second. Issue is the lack of
pagination in the /api/projects endpoint.
Example 5: Payment Bug
Summary: Promo code "LAUNCH20" applies 20% discount but checkout charges full price
Environment: Chrome 121, macOS 14.2, Production, New user account
Steps to Reproduce:
1. Navigate to /pricing
2. Click "Get Started" on the Pro plan
3. On the checkout page, enter promo code "LAUNCH20"
4. Click "Apply"
5. Confirm discount shows (-$6.00) in the order summary
6. Enter test card 4242 4242 4242 4242
7. Complete checkout
8. Check the Stripe dashboard for the actual charge
Expected Result:
User is charged $23.99 (Pro plan $29.99 minus 20% discount).
Actual Result:
User is charged $29.99 (full price).
Discount appeared in the UI but was not applied to the Stripe PaymentIntent.
Stripe charge ID: ch_3O4k2...
Severity: Critical
Priority: P1
Jira Bug Report Best Practices
1. One Bug Per Ticket
Never combine multiple bugs in a single Jira issue. "Login broken and also the export doesn't work" creates ambiguity about what "Done" means. File separate tickets for each distinct issue.
2. Use Labels and Components
Jira labels help filter bugs by area:
- Labels:
regression,blocker,mobile,accessibility,performance - Components:
authentication,billing,dashboard,api
This allows teams to quickly filter: "Show me all billing bugs at Critical severity."
3. Link Related Issues
Use Jira's "Link" feature to connect related bugs:
- "is caused by" → links to root cause tickets
- "blocks" → links to features that can't ship until this is fixed
- "is duplicated by" → when you find a duplicate
4. Update the Status Immediately
Jira's value comes from accurate status tracking. Update bugs as they progress:
- Open → assigned to developer
- In Progress → developer actively working
- In Review → fix deployed to staging, awaiting QA verification
- Done → QA confirmed fix in production
5. Write Regression Test Notes
When closing a bug, add a comment with the steps to verify the fix and a note for regression testing:
Fix verified in staging build 2.4.1.
Regression test: Run steps from "Steps to Reproduce" — login
now correctly redirects to /dashboard.
Added to regression suite: TC-1047.
Jira Bug Report Template for Different Teams
For Agile/Scrum Teams
Add these fields to your Jira bug template:
Sprint: [Current sprint name]
Story Points: [Estimated fix effort]
Affected User Stories: [Link to related user stories]
Acceptance Criteria for Fix: [How will we know this is fixed?]
For API/Backend Bugs
API Endpoint: POST /api/users/profile
HTTP Method: POST
Request Headers: Content-Type: application/json, Authorization: Bearer [token]
Request Body: {"name": "Test User", "avatar": null}
Response Status: 500
Response Body: {"error": "Internal Server Error", "trace": "..."}
For Mobile Bugs
Device: iPhone 14 Pro
OS Version: iOS 17.1.2
App Version: 3.2.1 (build 421)
Network: WiFi / 4G / 5G
Reproduction Rate: 3/3 attempts
Automating Jira Bug Report Generation
The biggest problem with bug reports isn't the template — it's the time and discipline required to fill it out consistently. Most teams start with good intentions and gradually slide back to incomplete reports.
Test Buggy solves this by automating the entire documentation process:
- Install the Chrome extension — takes 30 seconds
- Click Start Recording before your test session
- Test normally — the extension runs silently in the background
- Click Stop & Generate when you find a bug
The AI analyzes your recorded session and automatically fills:
- Steps to Reproduce — grouped into meaningful steps, not raw clicks
- Expected and Actual Result — inferred from what the AI detects went wrong
- Console Errors — captured automatically, no DevTools needed
- Network Issues — failed requests with status codes and response bodies
- Environment — browser, OS, URL captured automatically
- Severity — assessed based on actual impact and error types
- GIF Recording — visual proof included automatically
The result is a complete, Jira-compatible bug report in about 3 seconds. Export directly to Jira (coming soon), download as CSV, PDF, HTML, or Excel, or copy as Markdown for AI coding assistants.
Getting Started
Option 1: Use the template manually Copy the template at the top of this guide into your Jira bug issue type configuration (Project Settings → Issue Types → Bug → Edit fields).
Option 2: Automate with Test Buggy Install the Chrome extension (free, 10 credits included), record your next testing session, and get a complete Jira-ready bug report automatically.
Your developers will write better fixes. Your QA cycle will run faster. Your Jira backlog will finally tell the truth.
Related Articles
Jira QA Workflow: How to Manage Bug Tracking from Discovery to Close
A complete guide to managing QA workflows in Jira: issue types, bug tracking fields, sprint integration, status flows, and how to generate Jira-ready bug reports automatically.
How to Write Bug Reports Faster: 7 Techniques That Actually Work
Writing bug reports doesn't have to take 15 minutes. Here are 7 proven techniques to document bugs faster without sacrificing quality — including AI-powered automation.
The Best AI Bug Report Generator for Chrome in 2026
Looking for an AI-powered bug report generator? Learn how Test Buggy turns browser recordings into professional, Jira-ready bug reports automatically.