MyFamilyTracker
Real-time family location sharing — Firebase Realtime DB for sub-second propagation, WorkManager + ForegroundService for OS-compliant background collection, geofencing via Google Maps API.
Teams either automate too early or never at all. Here's a practical breakdown of where manual testing wins, where automation pays off, and how to know which one your project actually needs.
On this page
Every year, someone publishes an article saying manual testing is dead.
It isn't. It's also not enough on its own. The teams that get this right aren't the ones who picked a side — they're the ones who use each approach for what it's actually good at.
Here's the honest breakdown after 13 years of QA across Android apps, web platforms, and multi-device signage systems.
Automation can only test what you've already thought of. When you're exploring a new feature, looking for edge cases, or trying to understand how something behaves under unexpected conditions — a human thinker is faster.
A good QA engineer exploring a new payment flow will find things no test script will catch: the confusing button label, the state that gets stuck if you tap twice quickly, the error message that appears in the wrong language. These aren't regressions. They're discoveries.
[!TIP] Exploratory testing works best with a charter: a focused goal ("Explore the checkout flow as a first-time user with a slow connection") rather than freeform clicking. Structured exploration catches more than random poking.
Does this look right? Is the spacing off? Does the animation feel janky on the cheapest device you support?
Automation checks that elements exist and contain the right data. It doesn't judge whether the experience is good. Visual regression tools help, but they compare screenshots — they don't evaluate whether a design decision is confusing to a human.
A feature is changing once, deploying to one environment, and the business needs confidence before sign-off. Setting up a full automation suite for a feature that will be tested twice in its lifetime is not a good ROI. Manual spot-check plus sign-off is the right call.
AI-generated content. Recommendation engines. Map routing. Some systems produce different correct outputs for the same input. Automation that asserts a specific output will be flaky by design. Manual evaluation — "does this response make sense?" — is the right tool.
You have 200 test cases that need to run after every build. If each takes 2 minutes manually, that's 6+ hours of human time per release. Automation runs it in 20 minutes overnight and shows you a report in the morning.
This is where automation pays for itself immediately. Regression testing is repetitive, deterministic, and time-sensitive. Every release needs it. No human QA team can keep up sustainably.
We test across 18 platforms. Running the same 50 critical flows manually on each platform combination is not realistic before a release deadline. Automated test suites running on a device cloud handle what would take a team of people a full day.
UI changes but contracts shouldn't. Automated API tests catch when a backend response changes shape, drops a field, or starts returning 200 instead of 404 for missing records. These run fast, they don't flake, and they catch integration breaks before QA even starts manual testing.
// Example: Kotlin API contract test
@Test
fun `departure response contains required fields`() {
val response = api.getDepartures(stationId = "BKK001")
assertThat(response.isSuccessful).isTrue()
assertThat(response.body()?.departures).isNotEmpty()
response.body()?.departures?.forEach { departure ->
assertThat(departure.trainId).isNotEmpty()
assertThat(departure.scheduledTime).isNotNull()
assertThat(departure.platform).isNotEmpty()
}
}No manual tester can simulate 500 concurrent users hitting your API. Automation with tools like k6 or JMeter does this before you find out the hard way in production.
The most common automation failure I've seen isn't bad test code. It's automating the wrong thing at the wrong time.
A feature is in active development. The UI changes every week. The API contract is still evolving. Someone writes a comprehensive Espresso test suite for the current state. Two weeks later, half the tests are broken because the UI changed. The team spends more time fixing tests than catching bugs.
Signs you're automating too early:
[!WARNING] Don't automate for automation's sake. The goal is confidence in your software, not a high test count. A small suite of reliable, well-maintained tests beats a large suite of flaky ones every time.
| Situation | Use Manual | Use Automation |
|---|---|---|
| New feature, first test | ✅ | — |
| Repeated regression after each build | — | ✅ |
| UI/UX evaluation | ✅ | — |
| API contract validation | — | ✅ |
| One-off validation before release | ✅ | — |
| Multi-device coverage | — | ✅ |
| Exploring edge cases | ✅ | — |
| Performance under load | — | ✅ |
| Feature under active development | ✅ (keep it light) | — (wait for stability) |
On our Android apps, the test strategy for each release looks like this:
Automation covers the repetitive volume. Manual covers the judgment calls. Neither tries to do the other's job.
The teams that fail at testing usually have one of two problems: they trust automation to catch everything (so bugs slip through in the judgment-call areas), or they distrust automation and run everything manually (so they can't keep up with release velocity and start skipping checks).
Pick the right tool for each job. That's the whole answer.
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.
Related Posts
Related Apps
Real-time family location sharing — Firebase Realtime DB for sub-second propagation, WorkManager + ForegroundService for OS-compliant background collection, geofencing via Google Maps API.
Building something? Available for Android dev and QA consulting.
Work with meComments — powered by Giscus