Topic 01

What is QA?

18 min readPart 1 — Foundations
By the end you'll be able to

Understand what quality assurance is and the value a QA engineer creates.

Qa Core JobCost Of Late BugsQa Dev PartnershipConstructive CuriosityQa Typical Day

Topic 1 — What is QA?

Goal: Understand what quality assurance is and the value a QA engineer creates.

Lesson 1.1 — One job, said plainly

It's Nadia Haddad's first morning at FreshCart, a 40-person food-delivery startup, and she's terrified she's about to be asked to write code. For eight years she was a pharmacy technician, checking prescriptions and catching dosage errors before they reached a patient. She can't build an app, and she's wondering what she's doing in a room full of engineers.

Her manager, Marcus Bell, the lead QA engineer, sits down and says one sentence that unknots her whole stomach: "Your job is to make sure the app works for real people before we ship it to them."

That sentence is the whole role. A QA engineer's one core job is to find and report defectsbugsbefore a release reaches users. Not write the main product code. Not manage the developers. Check that what was built actually works, and raise a clear flag when it doesn't.

Nadia relaxes, because she's done a version of this her entire career. Catching a wrong dose before it leaves the counter, double-checking, refusing to wave something through on "it probably works" — that is the QA instinct. The product is new; the mindset is hers already.

QA's product is not the app. QA's product is confidence — a defensible answer to the question "is this safe to release?"

Lesson 1.2 — The math that makes the job exist

In week two, Nadia asks Marcus the question every career-changer asks privately: why pay a whole person just to look for problems? Can't the developers catch their own mistakes?

Marcus pulls up a real example. A few months back, a checkout bug slipped past everyone: promo codes silently failed to apply, so customers were charged full price. It wasn't found in testing. It was found by users — hundreds of them, on a busy Friday night — who got charged wrong, flooded support, and demanded refunds. The team scrambled an emergency fix at 9pm, FreshCart refunded the difference, and some of those customers never ordered again.

That's the cost-of-late-bugs rule, and it's the economic reason QA exists. The same bug costs almost nothing if a tester finds it before release. Found after release, by thousands of users, it gets dramatically more expensive: emergency engineering time, refunds, lost sales while checkout is broken, and the slow damage of people deciding the app can't be trusted.

Where the bug is caughtWhat it costs FreshCart
In testing, before releaseA bug report and an hour of a developer's time
In production, by usersEmergency fix + refunds + lost orders + reputation

Studies disagree on the exact multiplier, so be skeptical of anyone quoting a precise "100x." But the direction is not in doubt: the later a defect is caught, the more it costs. Nadia's salary is cheaper than one bad Friday night — that's the trade FreshCart is making, and she's the good side of it.

Lesson 1.3 — What QA can and can't promise

There's a trap Nadia almost falls into, and Marcus heads it off early. She tests the new "live order tracking" map for two solid days, finds nothing, and writes "no bugs — it's fine to ship." Marcus gently fixes the wording with her, teaching her the most important sentence in the whole field, the first of the ISTQB seven testing principles:

"Testing shows the presence of defects, not their absence."

Read it slowly, because it reshapes the job. Testing can prove a bug exists — you found it, you can reproduce it, here it is. Testing can never prove a bug doesn't exist. Finding nothing only means you found nothing where you looked, not that the software is flawless. Exhaustive testing — every possible input on every possible device — is impossible for any real app.

So a good QA engineer never promises "zero bugs." That's a promise no one can keep. What Nadia learns to deliver instead is reduced risk: she's tested the paths that matter most, the ones real customers hit hardest, and the remaining unknown risk is now small enough to release with eyes open. Her report becomes "I tested the main flows and these edge cases; here's what I found, here's what I didn't get to" — honest, and far more useful than a false "it's fine."

This is also why "it probably works" makes her itch. Probably is not a tested claim. It's a guess wearing a lab coat.

Lesson 1.4 — Priya is on the same team

Nadia files her first real bug on the checkout, and her hands are a little sweaty doing it. The code belongs to Priya Nair, a senior developer who built the payment flow and wrote its unit tests. Nadia is about to tell a seasoned engineer that her work is broken, and she braces for a fight.

There isn't one. Priya reads the report, replies "good catch — reproduced it, that's an edge case I missed," and ships a fix by lunch.

That exchange is the heart of QA–developer partnership. QA is not fault-finding, and a bug report is not an accusation. Building anything complex follows the same loop every time: build, check, fix, ship. The "check" step finding something is the loop working, not the developer failing. Priya wrote tests for the cases she could think of; Nadia's value is thinking of the cases Priya couldn't, because she comes at the app as a suspicious user instead of its author.

Good QA and good developers want the exact same thing: a product users can trust. They just attack it from opposite ends. When Nadia frames a bug as "here's what I saw, here are the exact steps, here's why it matters to a customer" instead of "you broke this," Priya stays a partner. Marcus's rule for her: report the behavior, never the person. A whole later topic covers writing bug reports that land this way.

Lesson 1.5 — A real day, and the mindset underneath it

So what does Nadia actually do between nine and five? Tom Reyes, FreshCart's product manager, has just written the spec for a new "schedule delivery for later" feature. Here's Nadia's week with it.

She reads the requirements — Tom's spec for how scheduled delivery should behave. She plans her tests — listing what could go wrong: What if someone picks a time in the past? A holiday? A slot that's already full? She executes the tests — walking the happy path (everything goes right) and the ugly edge cases (the weird inputs most people never try). She writes bug reports for what breaks, clear enough that Priya can reproduce each one. Then she re-tests fixes once they land, confirming the fix works and didn't break something nearby.

Notice what's not on that list: writing the feature's code. Nadia is checking and documenting, not building. Later she'll meet Dev Okafor, the automation engineer who maintains FreshCart's Playwright regression suite, and see where automated and API testing fit — but the core of manual QA is this loop of read, plan, test, report, re-test.

Underneath all of it runs one trait, the thing that actually makes someone good at this. Call it constructive curiosity. It's two instincts at once: the methodical inspector who checks every item like Nadia checked every prescription, plus a slightly mischievous user who grins and thinks "what happens if I do this?" — tapping "place order" twice, entering a promo code in ALL CAPS with a trailing space, putting the delivery address as a single emoji. She isn't breaking things to be destructive. She's breaking them on purpose, in private, so they can't break in front of a paying customer.

That instinct to double-check and to ask "what did they forget?" — Nadia walked in the door with all of it. The rest of this course just teaches it a new vocabulary.

Worked example — The promo code that lied

A new feature lands on Nadia's plate: a "$10 off your first order" promo. Tom's spec is one line — new customers get $10 off orders over $25. Watch the whole job run in miniature.

She reads the spec and senses the gaps a single sentence leaves. New customers — but who counts as "new"? Over $25 — so what happens at exactly $25?

She plans tests around those gaps and executes them. The happy path works: a new customer, a $30 cart, $10 comes off. Then she pushes on the edges. A $24 cart is rejected — correct. At exactly $25.00 the discount silently fails to apply, even though "over $25" should arguably include the threshold. Then the real find: she applies the code, removes an item to drop the cart under $25, and checks out — the $10 stays applied, so FreshCart sells a $20 order for $10.

She does not write "promo is broken." She writes a clear bug report: exact steps to reproduce, what she expected, what actually happened, and why it matters — this lets any user buy under the minimum at a discount, straight margin loss on every order. Priya reproduces it in minutes, fixes the cart-revalidation logic, and Nadia re-tests: the discount now drops correctly when the cart falls under $25, and Tom confirms the $25.00 boundary as "included."

A bug that would have leaked real money on every abused order, caught for the price of one careful afternoon. That afternoon is the job.

Key terms

  • QA engineer — the person who finds and reports defects before release; protects users and the business.
  • Defect / bug — a place where the software behaves differently from what's correct or intended.
  • Cost-of-late-bugs rule — the same bug is cheap caught in testing, expensive caught in production.
  • "Presence, not absence" — testing can prove a bug exists, never prove software is bug-free (ISTQB principle 1).
  • Happy path — the main route where the user does everything as expected.
  • Edge case — an unusual or extreme input that most users never try, where bugs love to hide.
  • Regression / re-test — checking that a fix works and didn't break something nearby.
  • Constructive curiosity — methodical inspection plus a drive to break things in order to strengthen them.

Try this

Open an app you use daily — a banking app, a food-delivery app, anything with a form. Spend ten minutes being a tester instead of a user. Try what a normal person wouldn't: leave a required field blank and submit, paste a 200-character name, enter letters where it wants a number, tap a button twice fast, go offline mid-action. Write down anything odd, in the form "steps → what I expected → what actually happened." You just executed tests and drafted bug reports, without writing a line of code.

Common pitfalls

  • Promising "no bugs." Saying "it's fine to ship" after finding nothing. You can only ever say "I tested these paths and found nothing there." Testing shows presence, not absence.
  • Only walking the happy path. Confirming the feature works when used perfectly and stopping there. The money and the trust are lost in the edge cases, so that's where the real testing lives.
  • Treating the developer as the opponent. Writing bug reports that blame ("you broke checkout") instead of describing ("here are the steps, here's the behavior"). It turns a partner into an adversary and gets bugs fixed slower.
  • Thinking you need to code first. Believing manual QA is closed to you without a programming background. Precision and process discipline from careful non-tech work is QA thinking — coding comes much later, if at all.

Key takeaways

  • A QA engineer's one job is finding and reporting defects before release — protecting users and the business, not writing product code or managing developers.
  • The cost-of-late-bugs rule is why QA exists: the same bug is cheap in testing and expensive in production.
  • Testing shows the presence of defects, not their absence — the goal is reduced risk, never a promise of zero bugs.
  • QA and developers are a blameless partnership running build, check, fix, ship toward one shared goal: a product users trust.
  • The mindset is constructive curiosity, and precision from careful non-tech work already counts as QA thinking.
Score 100% to unlock the next topic

Preparing your quiz…