Skip to content
All posts
January 18, 20264 min read

Common Mistakes in Manual Testing (And How to Fix Them)

Manual testing is straightforward in theory and easy to do badly in practice. Here are the most common mistakes that let bugs through and the habits that fix them.

TestingBest Practices
Share:

Manual testing mistakes aren't usually dramatic. They're small, habitual shortcuts that compound into real bugs reaching production. Here are the most common ones and what to do instead.


Mistake 1: Only Testing the Happy Path

The happy path test: valid inputs, ideal conditions, expected sequence of actions. Everything works. Test passes.

Meanwhile, the user who enters their name with an apostrophe, or taps the submit button twice, or runs the app on a 3-year-old device with 200MB free — they find the bug.

Fix: For every feature, explicitly test at least three failure scenarios before calling it done. Invalid inputs, network failure, interrupted flow. The happy path is the minimum, not the goal.


Mistake 2: Testing in Isolation

Testing one feature without considering what happens when it interacts with others.

Classic example: testing the profile edit feature works fine. Testing the checkout flow works fine. Testing profile edit while a checkout is in progress — the session state conflicts and the checkout fails. Neither feature was broken in isolation. The combination was.

Fix: After testing a feature independently, deliberately test it in combination with recently changed adjacent features. Think about shared state, shared sessions, and shared network resources.


Mistake 3: Not Documenting as You Go

"I'll write the notes up later." Later never comes with the same accuracy. Details blur. The exact steps that reproduced the bug become approximate. The specific conditions that triggered it get lost.

Fix: Write notes in real time, not from memory. Even rough notes taken during testing are more accurate than polished notes written an hour later.


Mistake 4: Skipping Precondition Verification

The test case says "precondition: user has a saved payment method." You start testing without verifying the precondition. The test fails — but not because of the feature you're testing. The saved payment method wasn't there.

Now you've wasted time debugging the wrong thing.

Fix: Verify preconditions explicitly before starting each test. Mark them as confirmed in your notes. A failed test with unverified preconditions is a test execution failure, not a product bug.


Mistake 5: Giving Up on Hard-to-Reproduce Bugs

"I saw it once but can't reproduce it." The bug goes into a "can't reproduce" queue and is forgotten. The intermittent bug ships to production and affects 1% of users at scale — which means hundreds or thousands of users.

Fix: When you see a bug once, document everything about the context immediately — device state, recent actions, network conditions, app version. Try to reproduce at least 3 more times before marking as intermittent. Intermittent bugs are often reproducible with the right conditions.


Mistake 6: Testing Only With Expected Data

Clean, well-formatted test data is not what real users enter. They enter names with special characters, emails with plus signs, amounts with commas, phone numbers in every format imaginable.

Fix: Include at least a few test runs with realistic, messy user data. Names: O'Brien, Smith-Jones, García, 张伟. Emails:

code
user+tag@domain.co.uk
. Amounts:
code
1,000.50
,
code
1000,50
,
code
$1000
.


Mistake 7: Not Testing on Real Devices

Emulators and simulators are useful but not sufficient. They don't replicate OEM customizations, battery optimization behaviors, or the real-world performance of budget hardware.

[!WARNING] A bug that only appears on real hardware running a Samsung or Xiaomi build is invisible in an emulator. For any Android app, real device testing on at least one non-Google device is mandatory before release.

Fix: Minimum real device coverage: the most common device in your user analytics + one budget Android + one device with a non-stock Android skin.


Mistake 8: Marking Tests Passed Without Full Verification

"It looks like it worked." Pass.

Did you verify the database update? Did you check the network request in the logs? Did you confirm the downstream effect (email sent, notification triggered)?

Fix: For each test, verify the expected result completely — not just the UI confirmation. Use logcat, network logs, and backend checks when the expected result has depth beyond what's visible on screen.


Mistake 9: Not Retesting After Bug Fixes

Bug is fixed. Developer closes the ticket. Nobody retests. The fix actually introduced a regression in an adjacent feature.

Fix: Every bug fix gets a retest that covers: the original bug (is it actually fixed?), the surrounding code (did the fix break anything adjacent?), and any related test cases from the regression suite.


Mistake 10: Comfort Zone Testing

Always testing the same features because you know them well. The feature you're least familiar with — the one that was recently refactored, the one added by the developer who just joined — gets the least testing because it's uncomfortable.

Fix: Track what you tested in each session. Consciously rotate to unfamiliar areas. Discomfort is a signal that more testing is needed there, not less.

These mistakes are fixable with habit changes, not talent changes. Pick the two that resonate most and work on them first.

Share:
S

Sudarshan Chaudhari

AI Systems Builder / Product Engineer

Bangkok, Thailand

Solo Android developer with 13+ years in QA, building Android apps, AI automation systems, and developer tools at SudarshanTechLabs.

Stay updated

Get new posts on Android, Kotlin, and solo dev straight to your inbox.

Newsletter preferences

Building something? Available for Android dev and QA consulting.

Work with me

Comments — powered by Giscus