How to run a bug bash before launch

We have sat in bug bashes that produced forty tickets and not one of them mattered. Every ticket was a typo, a color that was a shade off, a button that could be two pixels to the left. The room had spent an hour together and found nothing that would have stopped a real customer from getting stuck. That is not because the product was clean. It is because the session was set up to find small things instead of real ones, and that is a structural problem with three fixes: who is in the room, what you ask them to do, and how you decide what gets fixed before launch versus after.
Invite the people who did not build it
The person who wrote the code is the worst person to test whether a stranger can use it, because they already know where everything is.
A bug bash exists to put fresh eyes on a near-final build before it reaches a real customer. The practice traces back to Ron Patton's book Software Testing, which described gathering developers, testers, and other staff to test a build together outside their normal roles, and it became a standard pre-release step at companies including Microsoft and Google, where cross-team sessions are still run before major releases.
For that to work, the room needs people who were not on the build team. Pull in customer support, who will field the calls when something breaks. Pull in sales, who know what the customer was promised. Pull in someone from finance or operations who fits the target user profile but has never touched this feature. Each of these people carries an honest kind of ignorance: they do not know the intended path, so they cannot follow it by accident. That is the whole value. An engineer who built the checkout flow will type the right values into the right fields in the right order without thinking about it. Someone from support, given the same screen and a goal instead of a script, will hit the thing a real customer hits.
Keep engineers in the room too. Somebody needs to be able to say whether a report is a real defect or expected behavior, and to fix the sharpest ones on the spot. Just do not let them be the majority.
Give people a goal, not a checklist
Most bug bashes fail at the instruction, not the participants.
"Click around and try to break it" produces typo reports, because a typo is the easiest thing to notice and report, and an open-ended instruction rewards whatever is easiest. A specific task rewards something different. Write each task as a goal the way a customer would describe it, not as a list of steps: "You just signed up. Get your team invited and your first project set up." "You are trying to cancel your subscription before the trial ends. Do it." Do not tell people which screen to start on or which button to press. The gap between the goal and the path they actually take is where the real findings live: a confusing label, a missing confirmation, a state the interface never explains, a dead end with no way back.
Split the group so different people run different tasks, not everyone running the same happy path in parallel. Six people repeating the same signup flow will find the same three problems six times. Six people running six different realistic tasks, chosen to cover the flows that matter most, cover six times the ground.
Run the session for one to two hours. Long enough for someone unfamiliar with the product to attempt two or three tasks without rushing. Short enough that attention stays sharp and people report the problem instead of quietly working around it, which is what tends to happen once fatigue sets in.
On sample size: the Nielsen Norman Group's research found that testing with five users typically surfaces about 85 percent of a product's usability problems, because most usability problems are common enough that several users hit the same one, while only a few are rare enough to need a much larger group to catch. A bash with six to ten participants, each assigned a different realistic task, is closer to that finding than a bigger group clicking through the same one or two flows. More people help less than different people.
Triage in the room, on the spot, with a rule
A bug bash generates a pile of findings fast, and the pile itself is not the output. What matters is what gets fixed before the product ships and what gets scheduled for after.
Sort every finding into one of three groups, and do it in the room while the context is still fresh, not in a ticket queue two days later:
- Blocks the core task. The user cannot finish what they came to do, data is lost or corrupted, or the product does something it should never do (charges twice, deletes without confirming, exposes another account's data). This is a launch blocker. Nothing else needs a debate.
- Confusing but has a workaround. The user can finish, but it took longer than it should have, or they had to guess. This is real and it is not a blocker. It goes on a list for the first post-launch update, with a name and a date attached in the room, not "soon."
- Cosmetic. Spacing, color, copy that could be tighter. Fix it if it is fast. Otherwise it waits.
The naming and the date matter more than they sound like they should. A finding that gets marked "important" and then dropped into a backlog with no owner will not get fixed, and everyone in the room knows that, which is exactly why people keep arguing that their finding belongs in the blocker group even when it does not. Give the second group a real date for a real update, said out loud, and the argument mostly goes away, because deferring a finding no longer feels like losing it.
Do not let one person, especially the engineer who built the feature, be the sole judge of what gets downgraded from blocker to backlog. The person closest to the code is also the person most likely to see a real gap as a small detail, because they already understand why the interface behaves the way it does. Somebody in the room who does not have that context should have a real vote on triage, and every downgrade should get a one-line reason written down next to it. That line is what keeps the second group from becoming a place where real problems go to be forgotten.
What a bug bash cannot do
A bug bash finds problems in how a real person understands and moves through the product on one specific day, with one specific build. It will not catch a regression introduced next month, and it will not re-check the same rule on every future change the way an automated check does. In the work we do, a bug bash and an eval suite answer different questions: the bash tells you whether a stranger can complete the task, the automated checks tell you whether the thing that worked yesterday still works today. Running one instead of the other leaves a real gap, not a smaller version of the same coverage.
That is also why a bug bash belongs right before launch and not as a substitute for testing earlier. It is expensive to run, it needs real people's real time, and it works best on a build that is close to final. Automated checks run on every change, all the way through development, because a machine's time is nearly free and a person's is not.
Thanks to the customer support and sales teams who have shown up to bashes they had no reason to attend, and found the exact problems the build team was too close to see. The fastest way to learn what confuses your customer is to hand your product to someone who has never seen it and watch, quietly, where they get stuck.
Sources
- Nielsen Norman Group, Why You Only Need to Test with 5 Users: testing with five users typically surfaces about 85 percent of a product's usability problems, because most problems are common enough to repeat across users.


