๐ Series Navigation:
โ Previous: Part 8 - Modern QA Workflow
๐ You are here: Part 9 - Bug Reports That Get Fixed
Next: Part 10 - The QA Survival Kit โ
Introduction: The Bug Report That Gets Ignored
Picture this: You just spent 2 hours tracking down a nasty bug. You're excitedโthis is a good catch! You write a bug report and assign it to the developer.
Three days later: Status still "Open"
One week later: Developer comments: "Cannot reproduce"
Two weeks later: Bug closed as "Working as intended"
Your frustration level: MAXIMUM ๐ค
What went wrong?
Here's the hard truth: The quality of your bug report directly affects whether it gets fixed.
A great bug report:
- โ Gets fixed quickly
- โ Builds trust with developers
- โ Prevents back-and-forth questions
- โ Documents the issue for future reference
A bad bug report:
- โ Gets ignored or closed
- โ Frustrates everyone involved
- โ Wastes time with clarification rounds
- โ Damages your credibility
Today, you'll learn:
- โ The anatomy of a perfect bug report
- โ How to communicate effectively with developers
- โ Bug prioritization that everyone agrees with
- โ Following up without being annoying
- โ Building trust with your development team
Let's write bug reports that actually get fixed! ๐ฏ
๐ The Anatomy of a Perfect Bug Report
The Bad Bug Report (Don't Do This!)
Title: Login doesn't work
Description:
The login is broken. Please fix ASAP!!!
Priority: CRITICALWhat's wrong with this?
- โ Vague title (which login? how broken?)
- โ No reproduction steps
- โ No expected vs actual behavior
- โ No environment details
- โ No evidence (screenshots, logs)
- โ Emotional language ("ASAP!!!")
- โ Priority likely wrong
Developer reaction: sigh "Another vague bug report. I'll get to it... eventually."
The Good Bug Report (Do This!)
๐ Bug Report: Login fails with special characters in password
Bug ID: BUG-1337
Reported By: QA Jane
Date: 2025-11-20
Environment: Staging (v2.3.0)
Severity: ๐ด High (Blocks user login)
Priority: P1
๐ Summary
Users cannot log in if their password contains certain special characters
(&, <, >). The login form shows "Invalid credentials" error even with
correct password.
๐ Steps to Reproduce
- Navigate to https://staging.taskmaster.com/login
- Enter credentials:
- Email:
test@example.com - Password:
Pass&word<123>
- Email:
- Click "Login" button
โ Expected Behavior
- User successfully logged in
- Redirected to dashboard (/dashboard)
- Session token created and stored
- Welcome message displayed
โ Actual Behavior
- Error message appears: "Invalid credentials"
- User remains on login page
- Network tab shows HTTP 401 Unauthorized
- No session token created
๐ผ๏ธ Evidence
Screenshot: bug-1337-login-error.png
Video: bug-1337-recording.mp4
Network Logs: bug-1337-network.har
Console Error:
POST /api/auth/login 401 (Unauthorized) Error: Request failed with status code 401
๐ Additional Information
Works With These Passwords:
- โ
Pass123!(no &, <, >) - โ
Password#456(# and $ work fine) - โ
Test@Password123(@ works)
Fails With These Passwords:
- โ
Pass&word123 - โ
Test<User> - โ
My>Password
Pattern Identified:
Passwords containing &, <, or > always fail
Hypothesis:
Special characters may not be properly URL-encoded or HTML-escaped
before sending to API.
๐ Environment Details
- Browser: Chrome 130.0.6723.92
- OS: Windows 11 Pro
- Screen Resolution: 1920x1080
- Network: WiFi (fast connection)
- User Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)...
๐ก Suggested Fix
Check if passwords are properly URL-encoded before sending to backend API.
Verify HTML escaping is not being applied to password fields.
๐ Related Issues
- Similar to: BUG-1320 (XSS prevention in password field)
- Blocks: REQ-001 (User Registration - same issue likely exists)
- Duplicate of: None found
โ Workaround
Users can temporarily use passwords without &, <, > characters.
Not a viable long-term solution.
Impact: Affects all users with special characters in passwords.
Estimated ~5% of user base based on password complexity requirements.
Developer reaction: "Wow, this is detailed! I can reproduce this immediately. I know exactly what's wrong."
๐ฏ The Essential Elements
1. Title: Make It Scannable
Bad titles:
- โ "Bug in login"
- โ "Something broken"
- โ "URGENT FIX NEEDED"
- โ "Login issue"
Good titles:
- โ "Login fails with special characters (&, <, >) in password"
- โ "Task export generates empty CSV for >1000 tasks"
- โ "Reminder emails sent twice during DST transition"
- โ "Database deadlock when rescheduling multiple tasks"
Formula: [Feature] [Action] [Specific Condition/Symptom]
2. Steps to Reproduce: Be Obsessively Specific
Bad steps:
1. Login
2. Create task
3. Bug appearsGood steps:
1. Navigate to https://staging.taskmaster.com/login
2. Log in with credentials:
- Email: test@example.com
- Password: Test123!
3. Click "Tasks" in navigation menu
4. Click "+ New Task" button
5. Fill form:
- Title: "Test Task"
- Description: "<script>alert('test')</script>"
- Due Date: Tomorrow (use date picker)
- Priority: High
6. Click "Create Task" button
7. Observe: Script tags are not escaped in task listKey principles:
- Include exact URLs
- Provide test credentials (if needed)
- Specify exact input values
- Note which buttons/links to click
- Include timing (if relevant)
- Mention any setup required
3. Expected vs Actual: Clear Contrast
Expected Behavior:
โ
Script tags should be HTML-escaped
โ
Description displays as: <script>alert('test')</script>
โ
No JavaScript execution
โ
Browser console shows no errors
Actual Behavior:
โ Script tags are NOT escaped
โ Alert popup appears with message: "test"
โ Potential XSS vulnerability
โ Console shows: "Uncaught SecurityError"4. Evidence: Show, Don't Just Tell
Must-have evidence:
- ๐ธ Screenshot showing the bug
- ๐ฅ Video for complex interactions or timing issues
- ๐ Network logs for API issues (.har file)
- ๐ Console logs for JavaScript errors
- ๐๏ธ Database state (if applicable)
- ๐ Log files from server (if accessible)
Tools to capture evidence:
- Screenshots: Windows Snipping Tool, macOS Screenshot, Greenshot
- Videos: Loom, OBS Studio, QuickTime (Mac), Xbox Game Bar (Windows)
- Network logs: Browser DevTools โ Network โ Export HAR
- Console logs: Browser DevTools โ Console โ Copy
- Screen recording with annotations: SnagIt, Camtasia
5. Environment Details: Context Matters
Environment Checklist:
โก Application version/build number
โก Environment (dev, staging, production)
โก Browser + version (if web app)
โก OS + version
โก Mobile device + OS (if mobile)
โก Screen resolution
โก Network condition (WiFi, 4G, slow connection)
โก User role/permissions
โก Time/timezone (for time-dependent bugs)๐จ Bug Report Templates
Template 1: Functional Bug
๐ [Feature] [Action] [Symptom]
ID: BUG-XXXX
Severity: [Critical/High/Medium/Low]
Priority: [P0/P1/P2/P3]
Status: Open
Assignee: [Developer Name]
Summary
[One sentence describing the bug]
Steps to Reproduce
- [Step 1]
- [Step 2]
- [Step 3]
Expected Result
- [What should happen]
Actual Result
- [What actually happens]
Environment
- Version: [x.y.z]
- Browser: [Browser + Version]
- OS: [Operating System]
Attachments
- Screenshot: [filename]
- Video: [filename]
- Logs: [filename]
Additional Notes
[Any other relevant information]
Template 2: Performance Bug
โก Performance Issue: [Feature] [Slow/Unresponsive]
ID: PERF-XXXX
Severity: [High/Medium/Low]
Symptom
[What feels slow/broken]
Steps to Reproduce
- [Setup: data volume, user count, etc.]
- [Action that triggers performance issue]
- [Observation]
Performance Metrics
- Actual Time: [X seconds/minutes]
- Expected Time: [Y seconds]
- Acceptable Time: [Z seconds]
Impact
- [How many users affected]
- [Business impact]
Environment
- Data volume: [X records/users/tasks]
- Concurrent users: [X]
- Server specs: [If known]
Performance Data
- Network: [waterfall screenshot]
- CPU usage: [%]
- Memory usage: [MB/GB]
- Database queries: [count, slow query log]
Reproducibility
- Always: [X]
- Intermittent: [X]
- Frequency: [X% of the time]
Template 3: Security Bug
๐ Security Issue: [Vulnerability Type]
ID: SEC-XXXX
Severity: ๐ด Critical
Classification: [OWASP Category]
CONFIDENTIAL - RESTRICTED ACCESS
Vulnerability Summary
[Brief description - DO NOT include exploit details publicly]
Attack Vector
[How the vulnerability can be exploited]
Impact Assessment
- Confidentiality: [High/Medium/Low]
- Integrity: [High/Medium/Low]
- Availability: [High/Medium/Low]
- Scope: [Who is affected]
Proof of Concept
[Steps to demonstrate - BE CAREFUL with public disclosure]
Affected Components
- [Component 1]
- [Component 2]
Recommended Fix
[Mitigation suggestions]
References
- OWASP: [Link]
- CVE: [If applicable]
Disclosure Timeline
- Discovery: [Date]
- Reported: [Date]
- Expected Fix: [Date]
- Public Disclosure: [Date - follow responsible disclosure]
๐ Severity vs Priority: Getting It Right
Severity: How Bad Is It?
Severity = Technical Impact
๐ด Critical (Sev 1)
โโ Application completely down
โโ Data loss or corruption
โโ Security breach
โโ Payment processing broken
Examples:
- Database server crashed
- All users locked out
- Customer credit card data exposed
- Money charged twice
๐ก High (Sev 2)
โโ Major feature broken
โโ Affects many users
โโ No workaround available
โโ Significant functionality lost
Examples:
- Cannot create tasks (core feature)
- Login fails for 50% of users
- Emails not being sent
- Reports showing wrong data
๐ข Medium (Sev 3)
โโ Minor feature broken
โโ Affects some users
โโ Workaround exists
โโ Annoying but not blocking
Examples:
- Filter doesn't persist after refresh
- Tooltip shows wrong text
- Export to Excel fails (can use CSV)
- Mobile layout slightly misaligned
๐ต Low (Sev 4)
โโ Cosmetic issues
โโ Edge cases
โโ Minor inconveniences
โโ Polish items
Examples:
- Button slightly misaligned
- Typo in help text
- Icon wrong color
- Cursor doesn't change on hoverPriority: How Soon Should We Fix It?
Priority = Business Urgency
P0 - Drop Everything
โโ Severity: Critical
โโ Timeline: Fix in hours
โโ Impact: Business cannot function
โโ All hands on deck
P1 - Fix This Sprint
โโ Severity: High (usually)
โโ Timeline: Fix within days
โโ Impact: Blocking important work
โโ Next in line after P0
P2 - Fix Next Sprint
โโ Severity: Medium
โโ Timeline: Fix within weeks
โโ Impact: Annoying but tolerable
โโ Plan into roadmap
P3 - Backlog
โโ Severity: Low
โโ Timeline: When convenient
โโ Impact: Nice to fix someday
โโ May never get fixed (and that's okay)The Severity-Priority Matrix
| Severity โ / Business Impact โ | Critical Feature | Important Feature | Nice-to-Have |
|---|---|---|---|
| ๐ด Critical (Sev 1) | P0 - Fix Now | P0 - Fix Now | P1 - This Sprint |
| ๐ก High (Sev 2) | P0/P1 - Urgent | P1 - This Sprint | P2 - Next Sprint |
| ๐ข Medium (Sev 3) | P1 - This Sprint | P2 - Next Sprint | P3 - Backlog |
| ๐ต Low (Sev 4) | P2 - Next Sprint | P3 - Backlog | P3 - Backlog |
Example:
- Bug: Typo in help text for user registration
- Severity: Low (cosmetic)
- Feature: User registration (critical feature!)
- Priority: P2 (fix next sprint - it's important but not urgent)
๐ฌ Communication: The Human Element
DO: Collaborative Language โ
Instead of this:
โ "The login is completely broken! How did this even make it
through code review??"
โ "This is an obvious bug. Any competent developer would have
caught this."
โ "URGENT!!! Fix this NOW!!!"Say this:
โ
"I found an issue with login when passwords contain special
characters. I've documented reproduction steps below."
โ
"This appears to be an edge case we didn't catch in testing.
Here's what I found..."
โ
"This is blocking the release. Can we discuss priority in
today's standup?"DO: Provide Context โ
Bad:
"Task creation is broken"Good:
"Task creation fails when the description contains HTML tags.
This might be related to the XSS prevention work we did last
sprint. I noticed the escaping logic might be too aggressive.
Can you take a look?"DO: Suggest Solutions (When Appropriate) โ
"Issue: Emails not being sent to users with + in email address
Hypothesis: Email validation regex doesn't allow + character,
but RFC 5322 allows it (plus addressing is common with Gmail).
Suggested Fix: Update email regex to include + character.
Current: /^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+$/
Suggested: /^[a-zA-Z0-9._+-]+@[a-zA-Z0-9.-]+$/
Let me know if you need more details!"DON'T: Be Judgmental or Emotional โ
Avoid:
- "How could you miss this?"
- "This is terrible code!"
- "Obviously broken"
- "CRITICAL!!! FIX NOW!!!"
- "This never should have passed review"
- "I can't believe this bug exists"
These don't help: They put developers on the defensive and damage relationships.
๐ Following Up: The Art of Persistence
When to Follow Up
Too Soon: Same day you reported it
Too Late: Never checking on status
Just Right: 2-3 business days for normal bugs, 4-6 hours for critical
How to Follow Up
Bad follow-up:
"Why isn't this fixed yet??"Good follow-up:
"Hi Mike, checking in on BUG-1337 (login with special characters).
I know you're busy, but this is blocking testing for the registration
flow. Is there anything I can help with? Additional logs? Different
test case?"The Follow-Up Cadence
Day 0: Bug reported
Day 2: Friendly check-in (if no response)
Day 3: Mention in standup (if still no response)
Day 4: Escalate to team lead (if critical)
For critical bugs:
Hour 0: Bug reported
Hour 4: Check-in if no acknowledgment
Hour 8: Escalate to team lead
Hour 24: Escalate to managementFollowing Up on "Cannot Reproduce"
Developer says: "Cannot reproduce"
Don't say: "Yes you can! I just showed you!"
Do say:
"Thanks for trying! Let me help debug this:
1. Can you confirm you're testing on staging environment?
2. Are you using the test account test@example.com?
3. Did you try the exact password 'Pass&word<123>'?
4. Can we schedule a quick screenshare? I can show you live.
I've also attached a video showing the exact steps. Let me
know if that helps!"๐ค Building Trust with Developers
The Trust Equation
Trust = Reliability ร Helpfulness / Time Wasted
Ways to build trust:
- Write great bug reports (you're doing this!)
- Verify before reporting
- Can you reproduce it 3 times?
- Is it really a bug or expected behavior?
- Did you check the documentation?
- Don't cry wolf
- Not everything is Critical
- Save P0 for actual emergencies
- Be honest about severity
- Be a partner, not a gatekeeper
- Pair on tricky bugs
- Suggest solutions when you can
- Celebrate when bugs get fixed
- Give credit publicly
In team meeting: "Big shout-out to Mike for the quick fix
on BUG-1337! The special character handling is perfect now."- Admit your mistakes
"My bad - this wasn't a bug. I misunderstood the requirement.
Closing this as invalid."The Developer-QA Partnership
Bad dynamic:
QA: "I found 20 bugs!"
Dev: "These aren't bugs, they're features!"
QA: "No, they're bugs!"
Dev: *closes all as "Working as intended"*
[Relationship damaged]Good dynamic:
QA: "I found some unexpected behaviors. Can we sync on these?
Some might be bugs, some might be my misunderstanding."
Dev: "Sure! Let's look together."
[15-minute call]
Result: 12 actual bugs confirmed, 5 clarified as expected,
3 documented as future enhancements
[Relationship strengthened]๐ Bug Report Metrics (Optional)
Some teams track bug report quality:
๐ QA EFFECTIVENESS METRICS
Bug Report Quality Score:
โโ Accepted without questions: 90% โ
โโ Required clarification: 8%
โโ Closed as invalid: 2%
Average Time to Fix:
โโ Critical: 4 hours
โโ High: 2 days
โโ Medium: 5 days
Bugs Reopened:
โโ Rate: 5% (target: <10%) โ
โโ Reason: Incomplete fix
Developer Satisfaction:
โโ "Clear reproduction steps": 95%
โโ "Good evidence": 93%
โโ "Accurate severity": 88%If your bugs are being closed as "cannot reproduce" frequently, that's feedback to improve your reports!
๐ Conclusion: Communication is a Superpower
Great bug reports aren't just about finding bugsโthey're about effective communication. The best QA engineers are those who:
- Write clear, detailed, reproducible bug reports
- Communicate collaboratively and professionally
- Understand both technical and business impact
- Build trust through reliability and helpfulness
- Follow up persistently but respectfully
Your Bug Report Checklist
Before clicking "Submit":
โก Title is specific and scannable
โก Reproduction steps are detailed and exact
โก Expected vs actual behavior is clear
โก Evidence is attached (screenshots, videos, logs)
โก Environment details are complete
โก Severity and priority are accurate (not inflated)
โก Language is professional and collaborative
โก You've verified it's reproducible
โก You've checked for duplicates
โก You've provided all context developers needRemember
A bug report is not:
- An accusation
- A complaint
- An opportunity to show off
- A competition
A bug report is:
- A communication tool
- A collaboration opportunity
- Documentation for the team
- A chance to improve the product together
What's Next?
This is itโthe final article in the series! In Part 10, we'll bring everything together with The QA Survival Kit: templates, checklists, resources, and career advice to set you up for long-term success.
We'll cover:
- Ready-to-use templates (copy-paste friendly!)
- Essential checklists for every scenario
- Tools and resources worth knowing
- Career development advice
- Building your personal brand as a QA engineer
Coming Next Week:
Part 10: The QA Survival Kit - Templates, Tools & Career Advice ๐ ๏ธ
๐ Series Progress
โ
Part 1: Requirement Analysis
โ
Part 2: Equivalence Partitioning & BVA
โ
Part 3: Decision Tables & State Transitions
โ
Part 4: Pairwise Testing
โ
Part 5: Error Guessing & Exploratory Testing
โ
Part 6: Test Coverage Metrics
โ
Part 7: Real-World Case Study
โ
Part 8: Modern QA Workflow
โ
Part 9: Bug Reports That Get Fixed โ You just finished this!
โฌ Part 10: The QA Survival Kit
๐งฎ Quick Reference Card
Bug Report Checklist
BEFORE REPORTING:
โก Can I reproduce it 3 times consistently?
โก Is this actually a bug or expected behavior?
โก Did I check documentation/requirements?
โก Did I search for duplicate bugs?
ESSENTIAL ELEMENTS:
โก Descriptive title (Feature + Action + Symptom)
โก Step-by-step reproduction instructions
โก Expected behavior (what should happen)
โก Actual behavior (what actually happens)
โก Environment details (version, browser, OS)
โก Evidence (screenshot, video, logs)
โก Severity assessment (Critical/High/Medium/Low)
โก Priority recommendation (P0/P1/P2/P3)
NICE TO HAVE:
โก Hypothesis about cause
โก Suggested fix (if obvious)
โก Workaround (if available)
โก Related bugs or requirements
โก Impact assessment (% of users affected)
COMMUNICATION:
โก Professional tone (no blame, no emotion)
โก Collaborative language ("I found" not "You broke")
โก Context provided (why this matters)
โก Follow-up plan (when will you check status)Severity Quick Reference
๐ด CRITICAL: App down, data loss, security breach
๐ก HIGH: Major feature broken, many users affected
๐ข MEDIUM: Minor feature broken, workaround exists
๐ต LOW: Cosmetic, edge case, nice-to-fixRemember: Your bug reports represent you. Make them professional, thorough, and helpful! ๐ฏ
What's your best bug report story? Share in the comments!