Picture this: a developer opens a Jira ticket that reads “Login broken.” No steps. No environment. No screenshot. Two days of back-and-forth later, the sprint is delayed because the bug report was incomplete. This is more common than it should be, and it’s entirely preventable. A well-written bug report is one of the most important skills a QA engineer can develop. It is the bridge between identifying a defect and getting it fixed, and when that bridge is shaky, everyone on the team pays the cost.
In this guide, we walk you through exactly how to write an effective bug report: what to include, how to structure it, and what to avoid, so that every defect you log moves from discovery to resolution as fast as possible.
TL;DR: How to Write an Effective Bug Report
An effective bug report is a communication document that gives developers everything they need to reproduce, understand, and fix a defect, without a single follow-up question.
The 8 Components of an Effective Bug Report:
- Bug ID and; Title: A unique tracking ID plus a descriptive title written as: [Feature] + [what breaks] + [where or on which device]. Example: “Add to Cart button unresponsive on Safari iOS 17 — iPhone 14.”
- Environment Details: Specific OS, browser, device model, app version, and network type.
- Steps to Reproduce: A numbered, granular list of exact actions that trigger the bug, starting from a clear entry point.
- Expected Result: What the system should do when working correctly under those conditions.
- Actual Result: What the system actually does — described as observed behaviour, not assumed cause.
- Visual Evidence: A screenshot, screen recording, or log file that removes all ambiguity about what happened.
- Severity: How badly the bug impacts the system (Critical, Major, Minor, or Low)
- Priority: How urgently the fix is needed from a business perspective (High, Medium, or Low)
What is a Bug Report?
A bug report is a written record of bugs or defects in a software program that anyone can submit. A bug review is a formal meeting where all the defects of the current sprint are discussed and prioritised.
The process of doing so is called bug triage. How to write a Bug Report in software testing: It’s important for testers to write clear bug reports because they help developers understand what went wrong with their code.
Below are some tips for writing useful bug reports:
- Be specific about what didn’t work as expected.
- Explain why it failed (the reason behind it).
- Include any steps that reproduce the issue (including screenshots or video recordings).
- Try to give other information that might be useful, such as screen resolution, browser version, etc.
Bug reports should be well-structured and thoroughly detailed so that developers know exactly what needs to be fixed and get it done as quickly as possible. It helps prevent delays in software release and enables faster time-to-market without compromising quality.
Why a Good Bug Report Matters
Writing a clear bug report is not just a formality; it has a direct impact on how quickly defects get
resolved and how smoothly your team operates. Here is what a well-written bug report does for your
project:
- Saves developer time: A complete report with reproduction steps means developers can
diagnose the issue independently, without scheduling a call with the tester to understand what
happened. - Prevents bugs from reaching production: When defects are logged clearly and prioritised
correctly, they are far less likely to slip through into a release and affect real users. - Creates a shared source of truth: A documented bug report keeps all stakeholders, testers,
developers, and product managers aligned on what is broken and how urgent the fix is. - Speeds up regression testing: Historical bug reports serve as reference points during future
testing cycles, helping the team identify patterns in recurring defects. - Reduces back-and-forth communication: When a report already answers the key questions of what happened, where, and under what conditions, the need for clarification emails and
Follow-up threads drop significantly. - Supports accurate sprint planning: Product managers can only prioritise fixes effectively when
bug reports communicate the business impact of each defect clearly and without ambiguity
Bug Reporting General Guidelines
Writing a good bug report requires you to be on top of your game and keep in mind what matters most to your company.
Here are some general guidelines for writing useful bug reports:
- Do not create duplicates: search before filing!
- Always make sure to test the most recent available version.
- One bug per report.
- Provide helpful information, not opinion or criticism.
- Mark security/privacy vulnerabilities as non-public.
How To Write a Bug Report: Components Explained
A valid bug report needs to give developers everything they need to find, reproduce, and fix the defect without having to come back and ask questions. Each of the following components plays a specific role in making that possible.
- Title/Bug ID
- Background Information
- Environment
- Steps to Reproduce a Bug
- Expected Result
- Actual Result
- Visual proof
- Bug Severity and Priority
1. Title/Bug ID
The title should be self-explanatory about the issue. For instance, “False Text in FAQ Section on the Career page.
2. Background Information
Background information on bugs can help developers comprehend the problem. It provides the details of the issue that was encountered. Incorrect information can confuse and take up the time of testers and developers.
It is essential to speak clearly about the bug’s background details. It is always beneficial to use complete sentences.
Related read: Ways to Deal With Missed Bugs
3. Environment
A bug may manifest in specific environments and not in others. For instance, a bug occurs when you run the site on Firefox, or an app is not working correctly on one of the iPhone models. The bugs can be detected using cross-browser testing or tests that cross devices.
When reporting a bug, QAs need to be able to specify whether the bug was found within one of the distinct settings.
Utilise the template below to get specificity:
- Device Type: Hardware and the specific device model
- Os: Name of OS and version
- Tester: Name of the person who discovered the issue.
- The version of the software: The version of the program that is currently being tested, and the bug has been discovered.
- Connectivity Strength: The bug is dependent on an internet connection (4G, 3G, WiFi connection, Ethernet), mentioning its strength in testing time.
- The rate of reproduction: The number of instances where the problem occurred, including the exact steps in each reproduction.
Related read: How to Find Bugs in Software: Step-by-Step Guide
4. Steps to Reproduce a Bug
Make sure you list the steps in order from first to last so that developers can quickly and precisely go through them and see the issue for themselves.
Here’s an example of how to reproduce a bug with steps.
- Click “Get started” on the homepage.
- Select “Pricing Option”.
- Next steps.
5. Expected Result
The software developer must know what the requirements are so that they can determine the degree to which the bug has a negative impact on the user’s experience.
Give the best scenario for the end-user. Be sure to give as much detail as possible. Do not just say, “The app isn’t working properly, but it should.”
6. Expected vs Actual Results
Sometimes, what seems like a bug turns out to be expected behaviour. That’s why it’s good practice to include expected results in your bug report and what you would expect for those results. This way, other readers of your report can follow along and make sure everything lines up with how they expect it will.
By noting expected vs actual results, you’ll help your team get on the same page and focus on what needs fixing, rather than wasting time trying to figure out whether or not a result is as you thought it should be.
7. Visual Proof
Screenshots, videos, and log files are required to show the exact nature of the problem. Based on the nature of the issue, the developer might require video, text, and images.
Testing with TestGrid can leverage various options for debugging – screenshots, text logs and video logs, console log, and even network logs, whichever is suitable for the bug. These allow QAs and developers to identify precisely where the error occurred, then study the code and make corrections.
8. Bug Severity and Priority
Every bug needs to be categorised with a severity level and a priority level. These are two distinct axes,
and confusing them is one of the most common mistakes in bug reporting. Severity measures the technical impact of the bug on the system. Priority measures how urgently the fix is needed from a business perspective. A bug can be high severity but low priority, and vice versa.
Bug Severity – how badly does it break the system?
| Level | What it means | Example |
|---|---|---|
| Critical | The application crashes or becomes completely unusable. Core functionality is broken for all users. | Payment gateway throws an unhandled error and no transaction can be completed. |
| Major | A significant feature is broken. The app still runs but a key user journey is disrupted. | Users cannot upload profile photos on iOS, though they can on Android and desktop. |
| Minor | Unexpected or undesirable behaviour, but the system continues to function. A workaround exists. | The sort order on a data table resets after page refresh, requiring the user to re-apply it. |
| Low | Cosmetic or trivial. No functional impact. The product works correctly, but something looks off. | A tooltip text has a spelling error. A checkbox is misaligned by 2 pixels. |
Bug Priority – how urgently does it need to be fixed?
Priority is driven by business context, not technical impact alone. A spelling error on your homepage
checkout button may be low severity, but it is high priority because it directly affects conversions.
| Priority | When to use it |
|---|---|
| High | Fix before any other work. The issue is actively blocking users, damaging the business, or preventing a release. |
| Medium | Address within the current sprint or release cycle. The issue is real but not blocking critical workflows. |
| Low | Fix when capacity allows. The impact is minimal and the product is usable without the fix in place. |
Important: Severity and priority are assigned independently. A Critical severity bug found in a deprecated feature that no longer has active users may carry a Low priority. A Minor severity bug on the pricing page, where one misaligned button affects conversion, may carry a High priority. Always assess both axes separately.
Do’s and Don’ts of Writing a Bug Report
Following these practices consistently is what separates a bug report that gets acted on immediately from one that sits in the backlog waiting for clarification.
| ✔ Do | ✘ Don’t |
|---|---|
| ✔ Write the title as: [Feature] + [what breaks] + [trigger condition]. Example: “Add to Cart button unresponsive on Safari iOS 17.” | ✘ Write vague titles like “Button doesn’t work” or “Login issue” — these tell the developer nothing before they even open the ticket. |
| ✔ Log one defect per report, even if two bugs appear in the same flow. Separate reports mean separate fixes and cleaner tracking. | ✘ Bundle multiple bugs into a single report. Mixed reports make it impossible to close individual issues and distort sprint velocity. |
| ✔ Assign severity based on the actual impact on the user experience — how badly does this break the product for the end user? | ✘ Mark every bug as Critical or High to make it get fixed faster. Severity inflation erodes trust and makes genuine critical bugs harder to spot. |
| ✔ Include the exact environment: device model, OS version, browser version, and network type. The bug may only occur in that specific combination. | ✘ Write ‘tested on Chrome’ without specifying the version. Browser behaviour changes between releases and the developer needs the exact version to reproduce. |
| ✔ State both the expected result and the actual result separately. This removes ambiguity about whether something is a bug or intended behaviour. | ✘ Assume the developer will figure out what ‘should have happened.’ Always spell it out explicitly — every time. |
| ✔ Attach supporting evidence — a screenshot, screen recording, or log file — even if the steps to reproduce seem clear. | ✘ Skip attachments because the steps feel self-explanatory. Visual evidence catches details that written steps miss and saves significant debugging time. |
Bug Report Template
Use the following template for every bug report your team logs. Copy it into your bug tracking tool Jira, TestGrid, Linear, or any similar platform, and fill in each field as described.
| Field | What to write |
|---|---|
| Bug ID | Auto-generated by your bug tracking tool. (e.g., BUG-0042) |
| Title | [Feature] + [what breaks] + [where / on which device]. (e.g., “Add to Cart button unresponsive on Safari iOS 17 — iPhone 14”) |
| Reported by | Name of the tester who identified the defect. |
| Date reported | The date the bug was first observed and logged. |
| Environment | OS + version, browser + version, device model, app/build version, network type. (e.g., iOS 17.4 · Safari 17 · iPhone 14 · WiFi · App v3.2.1) |
| Steps to reproduce | Numbered list of exact actions that trigger the bug, starting from a clear entry point. |
| Expected result | What the system should do if working correctly. |
| Actual result | What the system actually does — describe the behaviour you observe, not your interpretation of the cause. |
| Severity | Critical / Major / Minor / Low — based on impact to the system. |
| Priority | High / Medium / Low — based on urgency for the business. |
| Attachments | Screenshots, screen recordings, console logs, or network logs that support the report. |
| Additional notes | Any relevant context: intermittent vs consistent reproduction, related tickets, workarounds discovered. |
Example of a Bug Report
Here is what the above template looks like when applied to a real defect. Every field is filled in, not with placeholder text, but with the level of detail that allows a developer to reproduce and fix the issue without needing to follow up
| Field | Filled-in value |
|---|---|
| Bug ID | BUG-0217 |
| Title | “Add to Cart button unresponsive on Safari iOS 17 — iPhone 14” |
| Reported by | Priya Mehta, QA Engineer |
| Date reported | 28 April 2026 |
| Environment | iOS 17.4 · Safari 17.4.1 · iPhone 14 (physical device) · WiFi · App v3.2.1 · UAT environment |
| Steps to reproduce |
1. Open the app on an iPhone 14 running iOS 17.4. 2. Navigate to the Home screen. 3. Search for any product (e.g., “Wireless Headphones”). 4. Tap on any product from the search results. 5. On the product detail page, tap the “Add to Cart” button. 6. Observe the button behaviour. |
| Expected result | The selected product is added to the cart. The cart icon in the top navigation bar updates to show the item count. A confirmation toast notification appears reading “Item added to your cart.” |
| Actual result | The “Add to Cart” button does not respond to taps. No visual feedback is shown. The cart count does not change. The issue reproduces consistently — 10 out of 10 attempts. The same flow works correctly on Chrome Android and Safari macOS. |
| Severity | Major — a core purchase flow is broken for all Safari iOS users. |
| Priority | High — Safari on iOS accounts for 38% of our mobile traffic based on last month’s analytics data. |
| Attachments |
Screen recording: cart_bug_safari_ios17_iphone14.mp4 Console log: safari_console_28apr.txt |
| Additional notes | Intermittent on iOS 16 (4 out of 10 reproductions). Consistent on iOS 17. No workaround identified. Related to BUG-0201 (cart sync issue) — may share root cause. |
Examples of an Effective Bug Report Writing
Below is an example of a bug report writing
Test scenario for applications: Let’s assume in your application, you want to create a new user and provide their information, and you will need to open the application and go to the menu for USERS > New User. Then, fill in all the information on the form of the user, such as the First and Last names, age, Addresses, Phones, etc. After you have entered all your information, you need to click on SAVE so you can save your user’s information. Upon saving the user, you will see a successful message, “New User has been created successfully”.
Now you log into your application by logging in and then navigating to the Users menu > New user, entering the required information, and hitting the Save button. Now the application has crashed. You can view a page of errors on your screen. Now you’d like to file a report on this bug.
Here’s how we can report bugs for the above scenario:
- Bug Name/Title: When creating a new user, clicking on save stops the application.
- Bug ID: The BUG Tracking Tool will create it automatically once it is saved.
- Area Path: USERS menu > New Users
- Build Number: Version Number 5.0.1
- Severity: LOW (High/Medium/Low)
- Priority: LOW (High/Medium/Low)
- Assigned to: Developer-A
- Created By: Tester’s Name
- Created On: Date of testing
- Reason: Defect
- Status: Open/New/Active
- Environment: Windows 7/SQL Server 2005
- Description: The application crashes after clicking the SAVE button while creating an account for a new user. This renders the application unable to create a brand new user.
Steps To Reproduce:
- Log in to the application
- Navigate to the Users Menu > New User
- Filled all the fields
- Clicked on the ‘Save’ button
- Seen an error page “ORA1090 Exception: Insert values Error….”
- See the attached logs for more information.
- And also, see the attached videos (if any), screenshot of the error page.
Expected: On clicking the SAVE button, a success message “New User has been created successfully”.
Important Features of Writing A Bug Report
A great bug report should contain everything a programmer needs to recreate and solve your problem.
Here are a few features that should be included in every good bug report:
- Bug Number/ID: A bug number helps in bug tracking and makes referencing bugs much simpler. Developers can quickly determine whether a specific bug has been resolved or not. It makes the entire testing procedure, retesting, and the like more efficient and smoother.
- Bug Title: The bug titles are more frequently read than any other portion in the report. They should be able to explain what is wrong with the bug. The Bug Title should also be evocative enough to allow the reader to comprehend the meaning behind it. A clear title for a bug is easy to comprehend and lets the reader know whether the bug was identified earlier or corrected.
- Priority: Based on the degree of severity and importance of the issue, the priority may be established for the bug based on its severity. Bugs can be classified as Blocker, Critical, Major, Minor, Trivial, or a suggestion. The priority of bugs may be assigned from P1 through P5 to ensure that the most critical bugs are considered first.
- Platform/Environment: Configuring the browser, OS, and different environments, like SIT, UAT, PROD, and LO, is essential for writing a bug report. It is the most effective method of describing how the issue can be replicated.
The application might behave differently in the absence of the same platform or environment. At the end of the tester’s experience, the bug might not manifest on the developer’s part. Therefore, it is recommended to be specific about the setting in which the issue was found.
- Description: A description of bugs helps developers comprehend the issue. It describes the problem encountered. If the description is not clear, it can confuse and take up the time of testers and developers.
It is essential to convey the impact of the description. It is always beneficial to make use of complete sentences. It’s good to separate each problem instead of slicing it into pieces. Do not use words like “I believe” and “I consider myself to be convinced”.
- Steps to Reproduce a Bug: A thorough Bug report should be clear about the steps needed to reproduce the bug. These steps should be accompanied by actions that could cause the issue. Do not make general statements. Make clear the steps to take.
An excellent instance of writing a properly written process is shown below.
Steps:
- Select the product Abc01.
- Click Add to Cart.
- Select Remove to order to delete the item from the shopping cart.
- Expected and Actual Result: A Bug description isn’t complete without the actual and expected results. It is essential to describe what the test result was and what the reader should anticipate. The test taker should be aware of the good results of the test. It is imperative to clearly state what took place during the test and then state the results.
- Screenshot: An image can be worth a thousand words. Make a screenshot or record the screen for a video of the failure using proper captioning to emphasise the issue. Highlight any unexpected error messages using the colour light red. It helps to draw attention to the needed area.
Frequently Asked Questions
What should every bug report include?
At minimum, a bug report must include a descriptive title, the environment in which the bug was found, numbered steps to reproduce the defect, the expected result, the actual result, a severity and priority level, and at least one piece of visual evidence such as a screenshot or screen recording. The more complete the report, the less time developers spend asking follow-up questions.
What is the difference between bug severity and bug priority?
Severity describes the technical impact of the bug on the system — how badly it breaks the product. Priority describes the urgency of the fix from a business perspective — how soon it needs to be addressed. These are independent: a Critical severity bug in a retired feature may be of Low priority, while a Minor severity spelling error on a checkout page may be High priority because it affects conversion
How do I write a bug report when I cannot reliably reproduce the steps?
Log the report anyway, and be transparent about the reproduction rate. Note how many times you attempted to reproduce the defect and how many times it occurred (e.g., “3 out of 10 attempts”). Include the exact conditions under which you first observed it — the device, the time, and what you were doing immediately before the bug appeared. Intermittent bugs are harder to fix, but still need to be on record.
Who is responsible for writing bug reports?
In most teams, QA engineers are responsible for logging bug reports during the testing phase. However, in agile teams, developers, business analysts, and even end-users in beta programmes may also submit reports, provided they follow the agreed template. The key is consistency: regardless of who writes the report, the format and level of detail should be the same.
Which tools can I use to write and track bug reports?
Popular bug tracking tools include Jira, Linear, GitHub Issues, and Bugzilla. For capturing supporting evidence during testing screenshots, video recordings, console logs, and network logs, TestGrid’s debugging suite provides all of these in one place, directly linked to the test run in which the defect was discovered. This makes it significantly easier to build a complete bug report at the moment the defect occurs, rather than trying to reconstruct it later.
Conclusion
Writing an effective bug report is one of those skills that looks straightforward but takes real discipline to get right, consistently. The difference between a report that gets actioned in the next hour and one that sits in the backlog for a week often comes down to three things: a title specific enough for the developer to know what they are looking at before opening the ticket, steps that are complete enough to reproduce the defect without guesswork, and a severity and priority assignment that reflects reality rather than urgency for the tester. Use the template and example in this guide as a starting point for your team.
Adapt the fields to your workflow and tooling, but keep the fundamentals environment, reproduction steps, expected result, actual result, and visual evidence nonnegotiable in every report. For teams who want to capture that supporting evidence at the moment a defect is discovered, TestGrid’s debugging gives QA engineers access to screenshots, video logs, console logs, and network logs directly within the testing session, so the evidence for the bug report is already there when you need it. Start your free trial at testgrid.io.