August 31, 2026
Cannot Reproduce Doesn’t Mean “Not a Bug”
While exploring the production environment, I noticed something strange.

By Fuad Ahammed
3 min read
It wasn't a crash or anything dramatic. The application was still running, and I could continue using it. But one particular behavior was clearly not what I expected.
So I did what any QA engineer would do.
I tried to reproduce the it. Nothing.
I repeated the same steps, this time paying closer attention to what I was doing. Still nothing. I refreshed the page, tried the flow again, checked the data, and even changed a few conditions that might have triggered the issue.
The bug was gone.
And now I had an uncomfortable situation: I had seen something that looked like a genuine bug, but I couldn't reproduce it.
That makes creating a proper bug report difficult.
A useful bug report usually needs clear reproduction steps, expected behavior, actual behavior, and enough evidence for a developer to investigate. But how do you write those steps when you're not even sure what triggered the issue?
I could have written a report based on assumptions.
I didn't.
Instead, I documented what I had observed: what I was doing, what happened, what I expected to happen, and whatever evidence I could capture at the time. Then I kept an eye on the affected flow.
That might sound like doing nothing.
It isn't.
The Difference Between "Cannot Reproduce" and "Not a Bug"
This distinction is easy to miss.
"Cannot reproduce" means we couldn't make it happen again.
It doesn't mean:
"The behavior never happened."
Those are two completely different conclusions.
Production makes this even more complicated because it isn't a controlled testing environment.
Real users have different accounts, different data, different devices, different network conditions, different permissions, and different ways of interacting with the same feature.
Sometimes timing matters.
Two requests might arrive almost simultaneously. A background process might update something between two user actions. An external service might respond differently for a short period. A database record might be in a state we didn't encounter during testing.
And sometimes, we simply don't know what caused the behavior.
That's what makes intermittent bugs so frustrating.
The first occurrence might give you nothing more than a symptom.
The second occurrence might give you a clue.
The third might finally reveal a pattern.
The System Is Running. So What?
I've also heard a version of this argument:
"But the system is working."
Yes, the system might be running.
The page loads. The API responds. Users can continue using the application.
But availability isn't the same as correctness.
An order can be created successfully while the inventory is incorrect.
A payment can succeed while the order status fails to update.
A user can complete a workflow while incorrect data is stored in the database.
Nothing crashes.
The application remains available.
But there is still a software defect somewhere in the process.
This is why I think software testing is about more than checking whether a feature works under normal conditions.
A QA engineer also has to think about different states, data, integrations, timing, dependencies, and unexpected user behavior.
What I Do When I Can't Reproduce a Production Bug
I don't think every one-time observation should immediately become a critical bug.
But I also don't think it should simply be forgotten.
If I can't reproduce an issue, I document it.
I capture whatever evidence is available.
I note the environment, user state, data, timing, and actions that led to the behavior.
Then I monitor the situation.
If the issue happens again, I compare the two occurrences.
Was the same API involved?
Was the data similar?
Did the same sequence happen?
Was the timing unusual?
Did another system interact with it?
That information can turn an unexplained observation into a reproducible production bug.
And once you have reproduction steps, investigation becomes much easier.
Sometimes the First Bug Is Only a Clue
That's probably the biggest lesson I've taken from dealing with issues like this.
As QA engineers, we naturally want reproducible problems. Reproduction makes debugging easier, makes bug reports stronger, and helps developers verify a fix.
But reproducibility doesn't determine whether something is a bug.
Sometimes you see the symptom before you understand the cause.
Sometimes the first occurrence disappears before you can investigate it.
And sometimes the application continues running normally while something underneath is behaving incorrectly.
So now, when I see an unexpected behavior in production and can't reproduce it, I don't automatically dismiss it.
I also don't pretend I have enough evidence to confidently call it a confirmed defect.
I record what I know, separate it from what I assume, and keep watching.
Because "Cannot Reproduce" isn't necessarily the end of a bug investigation.
Sometimes, it's the first clue that tells you where to start looking.