I noticed one of our development teams was creating new Jira Issues for each bug found during the development cycle. IMO, this is an antipattern.
These are the problems it can create, that I can think of:
- New Jira Issues (bug reports) are creating unneccessry admin work for the whole team.
- We see these bug reports cluttering an Agile board.
- They may have to get prioritized.
- We have to track them, they have to get assigned, change statuses, get linked, maybe even estimated.
- They take time to create.
- They may cause us to communicate via text rather than conversation.
- Bug reports mislead lazy people into tracking progress, quality, or team performance by counting bugs.
- It leads to confusion about how to manage the User Story. If the User Story is done except for the open bug reports, can we mark the User Story “Done”? Or do we need to keep the User Story open until the logged bugs get fixed…”Why is this User Story still in progress? Oh yeah, it’s because of those linked logged bugs”.
- It’s an indication our acceptance criteria is inadequete. That is to say, if the acceptance criteria in the User Story is not met, we wouldn’t have to log a bug report. We would merely NOT mark the Story “Done”.
- Bug reports may give us an excuse not to fix all bugs…”let’s fix it next Sprint”, “let’s put it on the Product Backlog and fix it some other day”…which means never.
- It’s probably a sign the team is breaking development into a coding phase and a testing phase. Instead, we really want the testing and programming to take place in one phase...development.
- It probably means the programmer is considering their code “done”, throwing it over the wall to a tester, and moving on to a different Story. This misleads us on progress. Untested is as good as nothing.
If the bug is an escape, if it occurs in production. It’s probably a good idea to log it.
The Value of Merely Imagining a Test – Part 1
3 comments Posted by Eric Jacobson at Thursday, November 12, 2015An import bug escaped into production this week. The root cause analysis took us to the usual place; “If we had more test time, we would have caught it.”
I’ve been down this road so many times, I’m beginning to see things differently. No, even with more test time we probably would not have caught it. Said bug would have only been caught via a rigorous end-to-end test that would have arguably been several times more expensive than this showstopper production bug will be to fix.
Our reasonable end-to-end tests include so many fakes (to simulate production) that their net just isn’t big enough.
However, I suspect a mental end-to-end walkthrough, without fakes, may have caught the bug. And possibly, attention to the “follow-through” may have been sufficient. The “follow-through” is a term I first heard Microsoft’s famous tester, Michael Hunter, use. The “follow-through” is what might happen next, per the end state of some test you just performed.
Let’s unpack that: Pick any test, let’s say you test a feature to allow a user to add a product to an online store. You test the hell out of it until you reach a stopping point. What’s the follow-on test? The follow-on test is to see what can happen to that product once it has been added to the online store. You can buy it, you can delete it, you can let it get stale, you can discount it, etc… I’m thinking nearly every test has several follow-on tests.
If You Interrupt Testing, It Will Cost Us 2 Lost Bugs
3 comments Posted by Eric Jacobson at Wednesday, April 22, 2015Look at your calendar (or that of another tester). How many meetings exist?
My new company is crazy about meetings. Perhaps it’s the vast numbers of project managers, product owners, and separate teams along the deployment path. It’s a wonder programmers/testers have time to finish anything.
Skipping meetings works, but is an awkward way to increase test time. What if you could reduce meetings or at least meeting invites? Try this. Express the cost of attending the meeting in units of lost bugs. If you find, on average, about 1 bug per hour of testing, you might say:
“Sure, I can attend your meeting, but it will cost us 1 lost bug.”
“This week’s meetings cost us 9 lost bugs.”
Obviously some meetings (e.g., design, user story review, bug triage) improve your bug finding, so be selective when choosing to declare the bugs lost cost.
Test Your Testing With Bug Seeding – Part 2
1 comments Posted by Eric Jacobson at Wednesday, November 26, 2014If you read part 1, you may be wondering how my automated check performed…
The programmer deployed the seeded bug and I’m happy to report, my automated check found it in 28 seconds!
Afterwards, he seeded two additional bugs. The automated check found those as well. I had to temporarily modify the automated check code to ignore the first bug in order to find the second. This is because the check stops checking as soon as it finds one problem. I could tweak the code to collect problems and keep checking but I prefer the current design.
Here is the high level generic design of said check:
Build the golden masters:
- Make scalable checks - Before test execution, build multiple golden masters per coverage ambition. This is a one-time-only task (until the golden masters need to be updated per expected changes).
- Bypass GUI when possible – Each of my golden masters consist of the response XML from a web service call, saved to a file. Each XML response has over a half a million nodes, which are mapped to a complex GUI. In my case, my automated check will bypass the GUI. GUI automation could never have found the above seeded bug in 28 seconds. My product-under-test takes about 1.5 minutes just to log in and navigate to the module being tested. Waiting for the GUI to refresh after the countless service calls being made in the automated check would have taken hours.
- Golden masters must be golden! Use a known good source for the service call. I used Production because my downstream environments are populated with data restored from production. You could use a test environment as long as it was in a known good state.
- Use static data - Build the golden masters using service request parameters that return a static response. In other words, when I call said service in the future, I want the same data returned. I used service request parameters to pull historical data because I expect it to be the same data next week, month, year, etc.
- Automate golden master building - I wrote a utility method to build my golden masters. This is basically re-used code from the test method, which builds the new objects to compare to the golden masters.
Do some testing:
- Compare - This is the test method. It calls the code-under-test using the same service request parameters used to build the golden masters. The XML service response from the code-under-test is then compared to that of the archived golden masters, line-by-line.
- Ignore expected changes - In my case there are some XML nodes the check ignores. These are nodes with values I expect to differ. For example, the CreatedDate node of the service response object will always be different from that of the golden master.
- Report - If any non-ignored XML line is different, it’s probably a bug, fail the automated check, report the differences with line number and file (see below) references and investigate.
- Write Files - For my goals, I have 11 different golden masters (to compare with 11 distinct service response objects). The automated check loops through all 11 golden master scenarios, writing each service response XML to a file. The automated check doesn’t use the files, they are there for me. This gives me the option to manually compare suspect new files to golden masters with a diff tool, an effective way of investigating bugs and determining patterns.

Test Your Testing With Bug Seeding – Part 1
0 comments Posted by Eric Jacobson at Tuesday, November 25, 2014I’m feeling quite cocky at the moment. So cocky that I just asked my lead programmers to secretly insert a bug into the most complex area of the system under test.
Having just finished another epic automated check based on the Golden Master approach I discussed earlier, and seeing that most of the team is on pre-Thanksgiving vacation, this is the perfect time to “seed a bug”. Theoretically, this new automated check should help put our largest source of regression bugs to rest and I am going to test it.
The programmer says he will hide the needle in the haystack by tomorrow.
I’m waiting…

You must really be a sucky tester.
I’m kidding, of course. There may be several explanations as to why an excellent tester like yourself is not finding bugs. Here are four:
- There aren’t any bugs! Duh. If your programmers are good coders and testers, and perhaps writing a very simple Feature in a closely controlled environment, it’s possible there are no bugs.
- There are bugs but the testing mission is not to find them. If the mission is to do performance testing, survey the product, determine under which conditions the product might work, smoke test, etc., it is likely we will not find bugs.
- A rose by any other name… Maybe you are finding bugs in parallel with the coding and they are fixed before ever becoming “bug reports”. In that case, you did find bugs but are not giving yourself credit.
- You are not as excellent as you think. Sorry. Finding bugs might require skills you don’t have. Are you attempting to test data integrity without understanding the domain? Are you testing network transmissions without reading pcaps?
As testers, we often feel expendable when we don’t find bugs. We like to rally around battle cries like:
“If it ain’t broke, you’re not trying hard enough!”
“I don’t make software, I break it!”
“There’s always one more bug.”
But consider this, a skilled tester can do much more than merely find a bug. A skilled tester can also tells us what appears to work, what hasn’t broken in the latest version, what unanticipated changes have occurred in our product, how it might work better, how it might solve additional problems, etc.
And that may be just as important as finding bugs.
Invigorated by the comments in my last post, I’ll revisit the topic.
I don’t think we can increase our tester reputations by sticking to the credo:
“Raise every bug, no matter how trivial”
Notice, I’m using the language “raise” instead of “log”. This is an effort to include teams that have matured to the point of replacing bug reports with conversations. I used the term “share” in my previous post but I like “raise” better. I think Michael Bolton uses it.
Here are a couple problems with said credo:
- Identifying bugs is so complex that one cannot commit to raising them all. As we test, there are countless evaluations our brains are making; “That screen seems slow today, that control might be better a hair to the right, why isn’t there a flag in the DB to persist that data?”. We are constantly making decisions of which observations are worth spending time on. The counter argument to my previous post seems to be, just raise everything and let the stakeholders decide. I argue, everything is too much. Instead, the more experience and skill a tester gains, the better she will know what to raise. And yes, she should be raising a lot, documenting bugs/issues as quickly as she can. I still think, with skill, she can skip the trivial ones.
- Raising trivial bugs hurts your reputation as a tester. I facilitate bug triage meetings with product owners. Trivial bugs are often mocked before being rejected": “Ha! Does this need to be fixed because it’s bugging the tester or the user? Reject it! Why would anyone log that?”. Important bugs have the opposite reaction. Sorry. That’s the way it is.
- Time is finite. If I’m testing something where bugs are rare, I’ll be more inclined to raise trivial bugs. If I’m testing something where bugs are common, I’ll be more inclined to spend my time on (what I think) are the most important bugs.
It’s not the tester’s job to decide what is important. Yes, in general I agree. But I’m not dogmatic about this. Maybe if I share some examples of trivial bugs (IMO), it will help:
- Your product has an administrative screen that only can be used by a handful of tech support people. They use it once a year. As a tester, you notice the admin screen does not scroll with your scroll wheel. Instead, one must use the scroll bar. Trivial bug.
- Your product includes a screen with two radio buttons. You notice that if you toggle between the radio buttons 10 times and then try to close the screen less than a second later, a system error gets logged behind the scenes. Trivial bug.
- Your product includes 100 different reports users can generate. These have been in production for 5 years without user complaints. You notice some of these reports include a horizontal line above the footer while others do not. Trivial bug.
- The stakeholders have given your development team 1 million dollars to build a new module. They have expressed their expectations that all energy be spent on the new module and they do not want you working on any bugs in the legacy module unless they report the bug themselves and specifically request its fix. You find a bug in the legacy module and can’t help but raise it…
You laugh, but the drive to raise bugs is stronger than you may think. I would like to think there is more to our jobs than “Raise every bug, no matter how trivial”.
Don’t Tell Anyone About Trivial Bugs
17 comments Posted by Eric Jacobson at Friday, September 26, 2014(Edit on 10/1/2014) Although too long, a better title would have been “You May Not Want To Tell Anyone About That Trivial Bug”. Thanks, dear readers, for your comments.
It’s a bug, no doubt. Yes, you are a super tester for finding it. Pat yourself on the back.
Now come down off that pedestal and think about this. By any stretch of the imagination, could that bug ever threaten the value of the product-under-test? Could it threaten the value of your testing? No? Then swallow your pride and keep it to yourself.
My thinking used to be: “I’ll just log it as low priority so we at least know it exists”. As a manager, when testers came to me with trivial bugs, I used to give the easy answer, “Sure, they probably won’t fix it but log it anyway”.
Now I see things differently. If a trivial bug gets logged, often…
- a programmer sees the bug report and fixes it
- a programmer sees the bug report and wonders why the tester is not testing more important things
- a team member stumbles upon the bug report and has to spend 4 minutes reading it and understanding it before assigning some other attribute to it (like “deferred” or “rejected”)
- a team member argues that it’s not worth fixing
- a tester has spent 15 minutes documenting a trivial bug.
It seems to me, reporting trivial bugs tends to waste everybody’s time. Time that may be better spent adding value to your product. If you don’t buy that argument, how about this one: Tester credibility is built on finding good bugs, not trivial ones.
About five years ago, my tester friend, Alex Kell, blew my mind by cockily declaring, “Why would you ever log a bug? Just send the Story back.”
Okay.
My dev team uses a Kanban board that includes “In Testing” and “In Development” columns. Sometimes bug reports are created against Stories. But other times Stories are just sent left; For example, a Story “In Testing” may have its status changed to “In Development”, like Alex Kell’s maneuver above. This normally is done using the Dead Horse When-To-Stop-A-Test Heuristic. We could also send an “In Development” story left if we decide the business rules need to be firmed up before coding can continue.
So how does one know when to log a bug report vs. send it left?
I proposed the following heuristic to my team today:
If the Acceptance Test Criteria (listed on the Story card) is violated, send it left. It seems to me, logging a bug report for something already stated in the Story (e.g., Feature, Work Item, Spec) is mostly a waste of time.
Thoughts?
Pushing Up All The Levels On The Mixing Board
1 comments Posted by Eric Jacobson at Friday, July 11, 2014…may not be a good way to start testing.

I heard a programmer use this metaphor to describe the testing habits of a tester he had worked with.
As a tester, taking all test input variables to their extreme, may be an effective way to find bugs. However, it may not be an effective way to report bugs. Skilled testers will repeat the same test until they isolate the minimum variable(s) that cause the bug. Or using this metaphor, they may repeat the same test with all levels on the mixing board pulled down, except the one they are interested in observing.
Once identified, the skilled tester will repeat the test only changing the isolated variable, and accurately predict a pass or fail result.
We had a relatively disastrous prod deployment last week. Four bugs, caused by a large refactor, were missed in test. But here’s the weirder part, along with those four bugs, the users started reporting previously existing functionality as new bugs, and in some cases, convincing us to do emergency patches to change said previously existing functionality.
It seems bugs beget bugs.
Apparently the shock of these initial four bugs created a priming effect, which resulted in overly-critical user perceptions:
“I’ve never noticed that before…must be something else those clowns broke.”
I’ve heard people are more likely to tidy up if they smell a faint scent of cleaning liquid. Same thing occurs with bugs I guess.
What’s the lesson here? Releasing four bugs might be more expensive than fixing four bugs. It might mean fixing seven and dealing with extra support calls until the priming effect wears off.
The Power To Declare Something Is NOT A Bug
17 comments Posted by Eric Jacobson at Thursday, April 24, 2014Many think testers have the power to declare something as a bug. This normally goes without saying. How about the inverse?
Should testers be given the power to declare something is NOT a bug?
Well…no, IMO. That sounds dangerous because what if the tester is wrong? I think many will agree with me. Michael Bolton asked the above question in response to a commenter on this post. It really gave me pause.
For me, it means maybe testers should not be given the power to run around declaring things as bugs either. They should instead raise the possibility that something may be a problem. Then I suppose they could raise the possibility something may not be a problem.
Jimmy John’s Online Ordering - Bugs In The Wild
1 comments Posted by Eric Jacobson at Tuesday, March 11, 2014Perhaps Jimmy John’s should have hired some software testers before slapping their “Order Online” logo all over the place.
Yesterday, while entering a group order online, I had a little trouble typing my Delivery Instructions in the “memo-size” text box.
The only way to add a drink to your sandwich order was to add a second sandwich. Um, I only want one sandwich.
I selected the earliest delivery time available:
However, after painstakingly collecting the orders of about 17 people, when I submitted my group order, Jimmy John’s showed me this user validation message:
And prior to me clicking the OK button, Jimmy John’s cancelled my entire order, including sending this email to all 17 people :
There is some additional context here that is too complex for this post. Suffice it to say, I was irritated that my order was cancelled with no warning.
I called the Jimmy John’s phone number provided on the top of my screen and the dude said, “we have no idea how to retrieve your order, we just get a printout when it’s submitted”.
In the end, the good people at my Jimmy John’s franchise accepted a fax with screen captures of my original group order (we tried email, but they couldn’t retrieve it) and they delivered the order flawlessly.
As soon as you hear about a production bug in your product, the first thing you may want to do, is volunteer to log it.
Why?
- Multiple people may attempt to log the bug, which wastes time. Declare your offer to log it.
- You’re a tester. You can write a better bug report than others.
- It shows a willingness to jump in and assist as early as possible.
- It assigns the new bug an identifier, which aides conversation (e.g., “We think Bug1029 was created by the fix for Bug1028”).
- Now the team has a place to document and gather information to.
- Now you are intimately involved in the bug report. You should be able to grok the bug.
Shouldn’t I wait until I determine firm repro steps?
- No. Bug reports can be useful without repro steps. The benefits, above, do not depend on repro steps.
- No. If you need time to determine repro steps, just declare that in the bug report’s description (e.g., “repro steps not yet known, investigation under way”) and add them later.
But what if the programmer, who noticed the bug, understands it better than me? Wouldn’t they be in a better position to log the bug?
- Maybe. But you’re going to have to understand it sooner or later. How else can you test it?
- Wouldn’t you rather have your programmer’s time be spent fixing the code instead of writing a bug report?
Should You Still Report Bugs If Nobody Listens?
13 comments Posted by Eric Jacobson at Tuesday, May 21, 2013Well…yes. I would.
The most prolific bug finder on my team is struggling with this question. The less the team decides to fix her bugs, the less interested she grows in reporting them. Can you relate?
There is little satisfaction reporting bugs that nobody wants to hear about or fix. In fact, it can be quite frustrating. Nevertheless, when our stakeholders choose not to fix certain classes of bugs, they are sending us a message about what is important to them right now. And as my friend and mentor, Michael Bolton likes to say:
If they decide not to fix my bug, it means one of two things:
- Either I’m not explaining the bug well enough for them to understand its impact,
- or it’s not important enough for them to fix.
So as long as you’re practicing good bug advocacy, it must be the second bullet above. And IMO, the customer is always right.
Nevertheless, we are testers. It is our job to report bugs despite adversity. If we report 10 for every 1 that gets fixed, so be it. We should not take this personally. However, we may want to:
- Adjust our testing as we learn more about what our stakeholders really care about.
- Determine a non-traditional method of informing our team/stakeholders our bugs.
- Individual bug reports are expense because they slowly suck everyone’s time as they flow through or sit in the bug repository. We wouldn’t want to knowingly start filling our bug report repository with bugs that won’t be fixed.
- One approach would be a verbal debrief with the team/stakeholders after testing sessions. Your testing notes should have enough information to explain the bugs.
- Another approach could be a “supper bug report”; one bug report that lists several bugs. Any deemed important can get fixed or spun off into separate bug reports if you like.
Don’t you just hate it when your Business Analysts (or others) beat you to it and point out bugs before you have a chance to?
It feels so unfair! They can send an email that says, “the columns aren’t in the right order, please fix it” and the programmers snap to attention like good little soldiers. Whereas, you saw the same problem but you are investigating further and confirming your findings with multiple oracles.
Well, this is not a bug race. There is no “my bug”. If someone else on your team is reporting problems, this helps you. And it certainly helps the team. You may want to observe the types of things these non-testers report and adjust your testing to target other testing.
But try to convert your frustration to admiration. Tell them “nice catch” and “thanks for the help”. Encourage more of the same.
Bug Report Attributes Part 4 – Version & Iteration
1 comments Posted by Eric Jacobson at Wednesday, March 06, 2013Two other bug report attributes I find useless are “Version” and “Iteration”. We no longer bother to populate these.
I used to think these were important attributes because the team could use them to answer questions like:
- How many bugs did we find in Iteration 16?
- We think Bug1001 is fixed in version 1.2.7. What version were you testing when you found Bug1001? Oh, you were testing version 1.2.6, that explains it.
Now days, I realize counting bugs found in test is not a helpful measure; especially since we’ve focused more testing in the Dev environment and often fix bugs without logging bug reports. In addition, many of my project teams have switched to Kanban so “Iteration” is a seldom used term.
Regarding the second bullet above, I came to realize that most bug report templates have “Created Date”, an auto-populated attribute. I also learned every version of the software under test has an auto-populated build deployment history. If we cross-reference a bug report’s created date with our build deployment history, we can always identify the version or iteration of the code the bug was found in. I would rather fall back on existing information (in the rare cases we need it), than capture extra information every time (that normally gets ignored).
In practice, questions like the second bullet above, never get asked. As long as one populates the Environment bug report attribute, confusion rarely occurs.
Bug Report Attributes Part 3 – Severity
8 comments Posted by Eric Jacobson at Wednesday, February 27, 2013My bug report template includes a Severity attribute but my teams don’t bother populating it. The severity choices on my template are:
We leave it on the default.
Try as you may, to objectively define Severity, and it is still arguably subjective. “Loss of Functionality w/Work Around”…well, if we are creative enough, we can always come up with a work around; let’s use the legacy process. “Data Corruption”…well, if we run a DB script to fix the corruption is this bug still severe?
From my experiences, it has been better for humans to read the bug report description, understand the bug, then make any decisions that would have otherwise been made based on a tester’s severity assessment.
As an example, if the bug report description does not indicate the system crashes, and it does, it is likely a poorly written bug description. One shouldn’t need a Severity to pigeon hole it into.
My advice? Save the tester some time. Don’t ask them to populate Severity. Benefit from the discussion it may force later.
Bug Report Attributes Part 2 – Priority
5 comments Posted by Eric Jacobson at Wednesday, February 20, 2013IMO, Priority should not be populated by testers. My teams use a customized version of Microsoft Team Foundation Server’s bug work item template. For whatever reason, Priority is a required attribute upon logging bugs. It defaults to “Medium” and I never change it.
From my experiences, testers often overstate bug priority, wanting to believe the bugs they found are more important to fix than other work that could be done. Some testers see themselves as the saviors of the user-in-distress. I see myself as the information gatherer for my development team and stakeholders. I don’t understand the business needs as well as my stakeholders, thus I remove myself from making claims about bug priority.
- Priority is a stakeholder question and it’s always relative to what else is available to work on. A High priority bug may be less important than a new Feature.
- From my experiences, Priority does not lead decisions. It follows.
- Tester: “Per our process, we will only patch production for High priority bugs”.
- Stakeholder: “Well, obviously we need to patch production today”.
- Tester: “But said bug is only a Medium priority”.
- Stakeholder: “Then change it to a High”.
- IMO, Priority is all but useless. The more High priority active bugs one has, the more diminished it’s label becomes. A better label is “Order”, as in let’s rank everything we can work on, from most important to least important, where each item has a unique ranking order.
Bug Report Attributes Part 1 – Environment
1 comments Posted by Eric Jacobson at Wednesday, February 13, 2013Reader, Srinivas Kadiyala, asked if I could share my bug report template. A bug report template high level view might be boring so instead let’s examine bug report attributes individually. Here’s Part 1.
Environment.
Environment can be more or less useful depending on how one populates it. Some testers equate Environment to the environment the bug was found in. IMO, Environment is more useful when it equates to the lowest active version of our software the bug exists in.
If a skilled tester finds a bug in the QA environment, they will probably next determine if it exists in the production environment. If it does, IMO the bug report should have Environment = Production (even though the bug was originally found in QA).
Now we have helped answer/trigger important questions for the team:
- Yikes! Should we patch production ASAP?
- Are we going to break something in production if we deploy the QA build without fixing this bug?
- How many bugs have escaped into production? We can query on this attribute to provide one of our most important measurements.

RSS