Bug Hunting and Risk-Based Exploration
Bug hunting is exploratory testing with one explicit aim: to find the most important failures in a limited time. Instead of exploring the whole product evenly, you aim at the areas where a failure is most likely and would hurt most — risk-based exploration — and you use heuristics and tours as your tactics. For example, before a clinic booking app releases family accounts, a tester spends a 90-minute session trying to make the shared wallet charge twice, because that failure would cost families money and cost the clinic their trust.
A bug bash is a bug hunt done by many people at once. For one time-boxed event, testers, developers, product owners, support staff and designers explore the same build, log what they find in one place, and the team triages the findings and reports the outcome afterwards. Bug hunting and bug bash are industry terms that the ISTQB Foundation syllabus does not define; in its terms, both are exploratory testing, an experience-based test technique, steered by risk.
Why it matters
Testing time is always limited, and two of the seven testing principles explain why aiming matters: exhaustive testing is impossible, and defects cluster together. Exploration that wanders across the product spends most of its time where nothing is wrong; exploration aimed at risk spends it where a failure would be expensive — money, permissions, data that cannot be recovered.
A bug bash adds many different eyes in a short time: a support agent tries what customers complain about, a designer notices layout problems, a developer probes failure modes they know from the code. For a tester, organising one is a visible way to lead quality work — but the value comes from the preparation that aims it and the report that turns raw findings into decisions, not from the event itself.
Risk-based exploration: aim before you explore
Risk-based exploration applies risk-based testing to exploratory work: the risk level decides where you explore first, how deeply and with how many people. Start from the product risks of the release, rated by likelihood and impact as in risk-based testing. For one feature you do not need a full risk register; a short ranked list agreed with the product owner and a developer is enough.
Then turn each high risk into charters with the template from session-based test management, and let the level set the depth. A very high risk may get several sessions, a second tester or a bug bash; a high risk at least one full session; a medium risk a short session if time allows; a low risk a short tour or nothing at all, as long as that decision is recorded. Likelihood tends to rise with these signals:
- New or rewritten code, and code that many people changed in this release.
- Complex rules: money, dates and time zones, permissions, flows that can be done in several orders.
- Integrations: payment providers, SMS and email, other teams’ APIs, and what happens when they are slow or fail.
- Defect clusters: components with many defects, reopened defects or production incidents in past releases.
- Customer signals: support tickets, app store reviews and analytics showing where users struggle.
- Gaps: weak automated coverage or vague acceptance criteria.
Heuristics and tours as hunting tactics
The exploratory testing guide explains heuristics, rules of thumb that suggest what to try next, and tours, themed routes through the product. In a hunt you choose them by the risk you are targeting, so that the tactic attacks the feared failure instead of repeating the happy path, and you keep the list of typical errors from error guessing at hand. A quick recap, matched to common risks:
- Wrong money — vary the inputs: discounts, rounding, zero and maximum amounts, totals that do not divide evenly. Despite its name, the money tour is not the tactic here: it visits the features that sell the product, the ones shown in demos.
- Lost or inconsistent data — the FedEx tour: follow one record through every screen, email, export and API that touches it.
- State conflicts — vary states and sequences: two tabs, two devices, back and forward, submit twice; the obsessive-compulsive tour repeats one action until something gives.
- Failing dependencies — the saboteur tour and interruptions: a slow or lost network, timeouts, a payment declined in the sandbox.
- Wrong access — take a persona: a removed member, a guest, a user whose session expired.
- Display and localisation — the supermodel tour: Arabic and English, right-to-left layout, long names, zoom.
- Neglected corners — the back-alley tour: settings, error pages and limits nobody demonstrates.
Try it: Edge Case Generator Try it: Special Character Dataset Generator
Organising a bug bash
A bug bash brings people with different knowledge to the same build for a short, intense hunt. Its value depends on preparation: without it, a dozen people spend the first half hour logging in, test the same happy path and report bugs that are already known. A tester usually acts as the facilitator; the product owner agrees the goal, and the development lead agrees to freeze the build and keep time free for fixes.
Hold it early enough to fix what it finds. A bug bash the day before release usually leaves time to list the problems, not to fix them.
Before: aim and prepare
Days before the event
- 1Rank the risksLikelihood × impact; agree goal and scope with the product owner
- 2Prepare build and dataFrozen build, test accounts, sandbox cards, known-issues list
- 3Assign charters to pairsHighest risks first; a tester with a non-tester where possible
On the day: hunt
One time box, such as 60 to 90 minutes
- 4Kick-offGoal, scope, rules and how to report
- 5Hunt in pairsHeuristics and tours aimed at the charter; every finding goes into the shared sheet
Repeats: Facilitator answers questions and spots duplicates and blockers
- 6Wrap-upThe most important finding; what nobody reached
After: decide and follow up
The same day or the next morning
- 7Triage the findingsRemove duplicates, reproduce, set severity and priority, file defects
Branch: Duplicates, known issues and non-defects: closed with a reason
- 8Report the outcomesCoverage, defects, gaps, questions and the risk now
- 9Follow upFixes, confirmation testing, regression cases, new charters
Illustrative: timings and roles vary by team; the preparation and the triage matter more than the event itself.
- Goal and scope — one sentence on what the bash is for, the areas in scope ranked by risk, what is out of scope, and the list of known issues so that nobody reports them again.
- Environment and data — a stable build in an agreed test environment, test accounts with the roles each charter needs, synthetic data and sandbox payment cards. Never real customer data.
- Charters and pairs — one charter per pair, highest risks first; where you can, pair a tester with a non-tester so that different knowledge meets.
- Reporting — one shared sheet, or a tracker label, with fixed fields: reporter, charter, title, steps, expected and actual result, evidence, device and build. Raw findings go there first; triage decides what becomes a defect report.
- On the day — a short kick-off on goal, scope, rules and reporting; a time box such as 60 to 90 minutes; a facilitator who answers questions and watches for duplicates and blockers; a wrap-up round on the most important finding and what nobody reached.
- Afterwards — triage the same day or the next morning: remove duplicates, reproduce, set severity and priority, file the defects linked to the bash, then report the outcome.
Worked example: a bug bash before a family-account release
A fictional clinic booking app is adding family accounts: the account holder adds up to five members, books appointments for them and pays from a shared wallet; cancellations more than 24 hours ahead are refunded to the wallet. Two weeks before release, the QA lead ranks the risks with the product owner and a developer and runs a 90-minute bug bash for 12 people in six pairs.
Two pairs take the wallet, because a double charge or a wrong refund is the highest risk. The other pairs take the last free slot booked by two members at once, privacy after a member is removed, the 24-hour cancellation rule, and the Arabic and English screens. The next morning the QA lead and the development lead triage the 31 raw findings, and the QA lead sends this summary (VH very high, H high, M medium):
- Critical: the wallet is charged twice when Pay is tapped again after a timeout.
- Critical: a removed member can still open the family’s upcoming appointments from a saved link.
- Question: a cancellation exactly 24 hours ahead is refunded, but the rule says “more than 24 hours”. Which is intended?
Bug bash: family accounts build 4.6.0 (staging) 90 min, 12 people, 6 pairs
Risk (level) Pairs Raw New defects Highest severity
Wallet charge and refund (VH) 2 9 4 Critical
Last slot, two members (VH) 1 5 2 Major
Removed member privacy (VH) 1 4 1 Critical
24 h cancellation rule (H) 1 6 2 Major
Arabic and English screens (M) 1 7 3 Minor
Triage: 31 raw -> 12 new defects, 9 duplicates, 4 known issues,
3 questions, 3 not a defect
Not reached: refund to an expired card (no sandbox card for it)
Risk now: wallet and privacy stay VH until the Critical fixes pass confirmation
testing; refunds to expired cards are still untested;
slot, cancellation and screens lower once their fixes are confirmed
Follow-up: 6 regression cases (2 automated at API level),
2 charters for the next sprintReporting the outcomes
The outcome of a bug hunt or a bug bash is information for a decision, not a score. A useful report answers four questions: what did we cover, what did we find, what did we not reach, and what is the risk now? Send it to the product owner and the development lead and add it to the test progress reporting for the release; the release decision stays with them.
Be careful with numbers. Twelve defects mean little on their own, and few defects in an area may mean that it is solid or that nobody looked hard. As the first testing principle says, testing shows the presence of defects, not their absence.
- Coverage — which risks and charters were explored, by how many people and for how long.
- Findings — new defects by severity with their IDs; duplicates, known issues and non-defects counted separately, which shows that triage happened.
- Gaps — what was not reached and why: a blocked environment, missing data, too little time.
- Questions — open questions with an owner, such as unclear rules found during the hunt.
- Risk now — for each risk, whether it is reduced, unchanged or still unknown, and why.
- Follow-up — fixes and confirmation testing, new regression cases and which to automate, new charters, and what to change at the next bash.
Common mistakes
- Exploring evenly, or wherever is easiest to reach, instead of aiming at the riskiest areas first.
- Running a bug bash without preparation: an unstable build, no accounts or data, no known-issues list. The time goes on setup and on re-reporting known bugs.
- Handing out no charters or areas, so that everyone tests the same happy path.
- Filing every raw finding straight into the tracker, which leaves developers with duplicates and vague reports.
- Rewarding the number of bugs found, which encourages trivial and duplicate reports. If you award anything, award the most important finding.
- Reporting only a bug count, without coverage, gaps and remaining risk, or reading few bugs as proof of quality.
The QA perspective
On a real team, bug hunting is part of planned testing, not a replacement for it. Typical moments are a major release, a large refactoring, a launch in a new market or language, or a feature that is “done” while the team still feels unsure about it. Agree the risks with the product owner, ask support what customers complain about, ask developers which parts they trust least, and ask one question early: who will fix what we find, and when?
Keep the evidence together: participants, build, charters, the shared sheet, triage decisions and the report. Link each defect to the bash and each new regression case to the defect it came from. After a few bashes, compare where defects were found with where the team expected them; that comparison improves the next risk ranking.
Practice exercise
Plan a bug bash for a group-ordering feature
A fictional food delivery app is adding group orders and releases them in two weeks. You have eight people for a 90-minute bug bash: two testers, three developers, one product owner, one support agent and one designer. Using the material below, plan the bash and outline the report you will send afterwards.
Feature: group order (build 3.2.0 on staging)
- The host creates a group cart and shares a link, valid for 60 minutes.
- Up to 10 guests join through the link and add their items.
- The host locks the cart and pays for everyone by card or wallet.
- Each guest can pay their share back to the host in the app.
- The delivery fee and any discount are split equally between all people.
Known issue: GRP-12 Guests without a profile photo show no avatar.- List at least five product risks and rank them by likelihood and impact.
- Write one charter for each of four pairs, naming the heuristic or tour each pair should use.
- List what must be ready before the bash and the fields of the reporting sheet.
- Outline the sections of the outcome report.
Show the model answer
Risks, highest first: a wrong or duplicate charge to the host after locking, retrying or switching between card and wallet (very high); wrong shares when the fee and discount are split, including rounding (very high); guests joining or changing items after the cart is locked or the link has expired (high); more than 10 guests, or two guests taking the last place at once (high); a guest seeing the host’s payment details or other guests’ phone numbers (high); Arabic or long item names breaking the shared cart (medium). The two payment risks come first because a failure costs real money (high impact) and the payment code is new and complex, with retries and two payment methods (high likelihood); the privacy risk has a high impact but a lower likelihood, and the display risk the reverse. The missing avatar (GRP-12) is known and low.
Charters: Pair 1, a tester and a developer: explore payment after locking with card, wallet, retries and a slow network (saboteur tour, interruptions) to discover wrong or duplicate charges. Pair 2, a tester and the product owner: explore share-back with fees, discounts and totals that do not divide evenly (varying the inputs) to discover split and rounding errors. Pair 3, a developer and the support agent: explore the link and the cart in several tabs and devices around locking, the 10-guest limit and the 60-minute expiry (varying states and sequences) to discover state conflicts. Pair 4, a developer and the designer: explore the cart as a guest in Arabic and English (supermodel tour, a guest persona) to discover display and privacy problems. You facilitate. With only two testers, pairs 3 and 4 have no tester, so give them the most concrete charters and check on them first.
Ready before the bash: the build frozen on staging; test accounts for every pair, including 12 for pair 3 so it can fill all 10 guest places and try an 11th guest; sandbox cards and wallet balances; the known-issues list with GRP-12; the charters; and a shared sheet with reporter, charter, title, steps, expected result, actual result, evidence, device and build. Plan a 10-minute kick-off, 70 minutes of hunting and a 10-minute wrap-up, then triage the next morning with the development lead and the product owner.
Report outline: goal, build and participants; coverage per risk and charter; new defects by severity with IDs, plus duplicates, known issues and non-defects; what was not reached and why; open questions with owners; the risk level now for each risk; follow-up actions: fixes, confirmation testing, regression cases and which to automate, and new charters.
Frequently asked questions
What is the difference between an exploratory session, bug hunting and a bug bash?
An exploratory session is one tester or pair working on one charter in a time box. Bug hunting is exploration whose main aim is to find important failures in risky areas, in one session or several. A bug bash is a bug hunt done by many people at the same time as one event, usually including people who are not testers.
Who should take part in a bug bash?
People who see the product differently: testers, developers from this and neighbouring teams, the product owner, support staff and designers. Where you can, pair each non-tester with a tester. Keep the group small enough for one facilitator to follow the shared sheet, or split a large group into areas, each with its own facilitator.
Can a bug bash replace planned testing?
No. It complements planned and automated testing by adding many perspectives for a short time. It does not give systematic coverage of the requirements, and its findings still need triage, fixes, confirmation testing and regression cases.
How do I know a bug bash was worth it?
Look at what it changed: important defects found before release, risks you can now rate with more confidence, questions about requirements that got answered, and charters and regression cases that were added. Compare its findings with what earlier testing found. The raw number of reports says little on its own.
References
- ISTQB Certified Tester Foundation Level (CTFL) v4.0The foundation syllabus of software testing: test levels and types, test design techniques, test management and tools.
- Explore It! Reduce Risk and Increase Confidence with Exploratory Testing (Elisabeth Hendrickson)The discipline of exploratory testing: charters, heuristics for varying inputs and states, and how it complements scripted tests.
- Exploratory Software Testing: Tips, Tricks, Tours, and Techniques to Guide Test Design (James A. Whittaker)The book that organised exploratory testing around "tours" — structured ways to explore features, data and user journeys.
- Session-Based Test Management (Jonathan Bach)The original description of session-based test management: chartered, time-boxed exploratory sessions, session sheets and debriefs.
Practise with Mutqan tools
Score features by likelihood and impact, then generate a prioritised risk-based test plan.
Generate high-level test scenarios covering functional, negative, security, usability and compatibility angles for a feature.
Generate edge cases for strings, numbers, dates, files, lists and concurrency from a field definition.
Generate inputs full of special characters: quotes, SQL/HTML/JSON metacharacters, control chars, emoji and path tricks.
Generate fake user records (name, username, email, password, avatar seed, role) for test accounts.
Go deeper
- Exploratory TestingTest tours: exploring with a tourist’s map
- Exploratory TestingHeuristics: how explorers generate test ideas
- Risk-Based TestingFrom risk level to test priority and test depth
- Defect TriageHow to run defect triage: participants, cadence, a checklist per defect, a severity × priority matrix, assignment, root cause analysis and anti-patterns.
Your progress on this topic
Not started
Mark the topic complete when you have studied it and done the exercise.
Sign in to track your progress
Mark topics complete, continue where you left off and unlock specialisation exams.