RizTech Academy logo
RizTech Academy
What QA Really IsLesson 4 of 425 min

The QA mindset: thinking like a user and an adversary

The single thing that separates a good tester from someone who merely runs through steps is a mindset — a habit of imagining how things could go wrong that most people, including the developers who built the feature, do not have. Tools and techniques can be taught in a week; the mindset is what you cultivate over a career, and it is what makes you find the bug nobody else did. This lesson is that mindset — how a QA thinks — because it underlies every technique in the rest of the course.

Developers think "does it work?"; QAs think "how could it break?"

A developer building a feature naturally tests the happy path — the way they intended it to be used — because that is what they had in mind while building it. They are, understandably, biased towards their own creation working. A QA's job is the opposite instinct: to ask "how could this break?" and then try to make it. Where the developer sees a top-up form and types ₹100 and sees it work, the QA asks:

  • What if I type ₹0? A negative? A hundred million? Letters? Emoji? Nothing at all?
  • What if I tap submit twice, fast? What if I tap it, then lose the network before the response?
  • What if I background the app mid-transaction and come back? Rotate the screen? Get a phone call?
  • What if my balance is exactly enough? One rupee short? What if two top-ups happen at once?

None of these are the happy path, and that is exactly why they are where bugs hide — the developer did not think of them because they were focused on making the normal case work. The QA mindset is the deliberate practice of thinking of them. You are not being negative or trying to make the developer look bad; you are doing the job they cannot easily do for their own work, because it is hard to imagine your own creation failing.

Think like a user — including the confused, hurried, and hostile one

Part of the mindset is inhabiting the real user, who is not the developer:

  • The ordinary user on a cheap phone and a slow network, in a hurry, not reading carefully — do they succeed, or does the app assume a fast device and full attention?
  • The confused user who taps the wrong thing, goes back, tries again, misunderstands the flow — does the app cope, or does it get into a broken state?
  • The hostile user who wants to cheat it — enter a negative amount to gain money, replay a request, access someone else's data. For a money app, thinking like an attacker is essential (the security lessons), because someone eventually will.

A developer tests as themselves — an expert, on a good device, using the app as designed. A QA deliberately tests as everyone else: the novice, the impatient, the mistaken, the malicious. The bugs live in the gap between "how the builder assumed it would be used" and "how real people actually use it".

The specific instincts

The mindset shows up as concrete habits you can practise:

  • Boundaries and edges. Bugs cluster at limits — zero, empty, the maximum, one-over, one-under, the first, the last. When you see a field, your instinct should be to probe its edges (the test-design lesson formalises this).
  • The unhappy paths. For every "what should happen", ask "what should happen when it fails?" — the network drops, the server errors, the input is invalid, the payment provider times out. Error handling is under-tested precisely because it is not the happy path.
  • State and sequence. Not just "does this action work?" but "does it work after that other action?", "twice in a row?", "interrupted halfway?". Many bugs are about the order and combination of actions, not a single one.
  • Assumptions. Every requirement rests on assumptions ("the network is up", "the amount is positive", "the user only taps once"). The QA mindset hunts assumptions and tests what happens when they are false.
  • "That's weird." When something looks slightly off — a flicker, a number that seems wrong, a delay — the mindset is to not dismiss it but to dig. Small "that's weird" moments are often the visible tip of a real bug.

The mindset is skepticism, not negativity

An important distinction, because it shapes how you work with the team (the working-with-developers lesson). The QA mindset is professional skepticism — "I will not assume this works until I have seen it work, including in the ways it might not" — not negativity or an adversarial stance. You are not trying to prove the developer incompetent or the product bad; you are trying to find the truth about the product so the team can ship with confidence. The best QAs are curious rather than cynical — genuinely interested in "what does this actually do in this situation?" — and they deliver what they find as helpful information, not as gotchas. Hold the skepticism (assume nothing works until shown), lose the negativity (you are on the same team, aiming at the same goal: a product that works for users).

Cultivating this mindset is the work of the whole course and beyond. Every technique — test design, exploratory testing, the automation — is a way of applying it systematically. But the instinct underneath is simple and you can start practising it today: for anything you use, ask "how could this break?", and then try.

Check your work

The core flip. Developers think "does it work?" (biased towards the happy path they built); QAs think "how could this break?" and try to make it — doing the job the builder cannot easily do for their own creation.

Think like the real user. The ordinary user (cheap phone, slow network, hurried), the confused user (wrong taps, back, retry), and the hostile user (wants to cheat — essential for money apps) — not the developer's expert self on a good device.

The instincts. Probe boundaries/edges (zero, empty, max, one-over); test the unhappy/error paths; test state and sequence (after, twice, interrupted); hunt assumptions and falsify them; never dismiss a "that's weird".

Skepticism, not negativity. Professional skepticism ("assume nothing works until shown, including the failure cases") delivered as helpful information — not an adversarial "gotcha" stance. Curious, not cynical; same team, same goal.

Practice

  1. Take a simple form (a login, a top-up) and list 15 ways to break it — edges, invalid input, double-tap, network loss, interrupts — before listing the happy path.
  2. Test one feature "as" three users: the hurried novice, the confused mistaken user, and the hostile cheater. Note a different risk each surfaces.
  3. For a field that takes an amount, write the boundary values you would try (and why each).
  4. For an action that should succeed, write down what should happen for five failure modes (network, server error, invalid input, timeout, duplicate).
  5. Find a "that's weird" moment in an app you use, dig into it, and see whether it is the tip of a real issue.
  6. Rewrite an adversarial-sounding bug complaint as helpful, curious information a developer would welcome — practising skepticism without negativity.

Official documentation

Next: reading a requirement and deriving test cases.

Stuck on this lesson?

Being stuck is part of it — but being stuck alone for three days is not. Our internship programme pairs this curriculum with code review and one-to-one help from working developers, and it is free.

About the internship