

What Good QA Looks Like When Requirements Are Unclear
A practical guide to how QA can handle incomplete or ambiguous requirements without guessing, blocking progress or turning every uncertainty into a bug.
Clear requirements are useful.
Real projects do not always have them.
Sometimes a ticket has two sentences. Sometimes the acceptance criteria describe only the happy path. Sometimes Product knows what it wants at a high level, Development has already filled in the missing details, and QA receives the feature after those assumptions have become code.
That is not unusual.
The important question is not whether requirements will ever be incomplete. They will.
The more useful question is what QA does when that happens.
Good QA does not guess. It also does not stop working and wait for somebody else to produce a perfect specification.
It starts turning uncertainty into questions.
The requirement is often only the beginning
A requirement might say: “Blocked users should not be able to manage their offers.”
It sounds clear until someone has to build or test it.
What does manage mean?
Can the user view an offer? Edit it? Duplicate it? Enable or disable it? Delete it? Can they open it from an old URL? What happens if they were already editing it when the account became blocked?
Does the frontend hide the action, or does the backend reject it? What response should the API return? What message should the user see?
The original requirement may still be correct. It is simply not complete enough to describe the behaviour of the product.
This is where QA becomes more valuable than someone following predefined steps.
The tester starts asking what the requirement leaves unsaid.
Understanding why the requirement exists matters too. If the purpose of blocking an account is preventing further commercial activity, that tells QA much more than the sentence alone. It points toward every action that creates, changes, resumes or accepts activity.
That is a different kind of QA.
Good QA exposes assumptions before they become bugs
One of the most expensive sentences in software can be: “I assumed that was how it should work.”
The developer assumed one thing. Product assumed another. QA assumed a third.
The user eventually discovers which assumption reached production.
Ambiguity itself does not guarantee failure. Teams often resolve unclear language naturally through discussion and shared context.
The real problem is ambiguity that matters and remains unresolved.
QA should not turn refinement into a grammatical inspection of every sentence.
The job is to find uncertainty that can change product behaviour.
| Type of uncertainty | Example | Useful QA question |
|---|---|---|
| Business rule | User cannot withdraw funds | Under which account states does this rule apply? |
| State | Contract is cancelled | What can each participant still view or do afterwards? |
| Boundary | Maximum upload is 10 MB | Is exactly 10 MB accepted? What happens at 10.01 MB? |
| Failure | Payment fails | Can the user retry? Can duplicate payment occur? |
| Permission | Admins can edit users | Which admins, which fields, and is the API protected too? |
| Timing | Link expires | What happens if the user is already on the page when it expires? |
| Platform | Feature works on mobile | Mobile web, native app, or both? Which differences are expected? |
| Communication | Show an error | Which error, when, and what should the user do next? |
Ask what happens if
One of the strongest habits in QA is also one of the simplest.
Ask: what happens if?
What happens if the request is sent twice? What happens if the session expires halfway through? What happens if the user changes role while the page is open? What happens if there is no data? What happens if the API succeeds but the next request fails?
What happens if the user comes back through an old link? What happens if two actions happen almost at the same time?
This is not about inventing unrealistic edge cases for the sake of finding bugs.
It is a way of making hidden assumptions visible.
High-level requirements often capture the main intent while variations, exceptions and failure behaviour remain implicit.
Good testers pull those questions forward.
What is written is only the visible part
A useful way to think about requirements is like an iceberg.
The ticket usually contains the visible part: the main action and the expected outcome.
Below that are the states and conditions the product still needs to handle.
That can include invalid input, expired sessions, duplicate requests, permissions, retries, API failures, mobile behaviour, notifications and existing data.
QA helps bring those hidden questions into the conversation before they become production behaviour.
From written requirement to real product behaviour
The visible requirement is only the starting point. QA helps expose the states and conditions around it.
Written requirement
Clarify the intended business rule.
Business intent
Keep this step connected to the quality process.
States and permissions
Keep this step connected to the quality process.
Boundaries and failures
Keep this step connected to the quality process.
Connected behaviour
Keep this step connected to the quality process.
Agreed examples
Keep this step connected to the quality process.
Testable product behaviour
Keep this step connected to the quality process.
Concrete examples are better than long arguments
Teams can spend ten minutes debating a sentence that becomes obvious after one example.
Imagine a requirement says: “Customers receive free shipping on orders over €50.”
Someone asks whether exactly €50 qualifies.
Now the team has discovered that over and at least are not the same rule.
Then another question appears: is the €50 calculated before discounts or after discounts? Does tax count? Does the same rule apply to every country?
This is why concrete examples are so useful.
Examples give Product, Development and QA something specific to discuss instead of allowing each person to translate an abstract sentence differently.
The unanswered cells are often the valuable part because they show exactly where the requirement ends and a business decision begins.
QA does not need to invent the answer.
QA needs to make sure somebody notices the question.
| Basket | Discount | Final total | Free shipping? |
|---|---|---|---|
| €49.99 | €0 | €49.99 | No |
| €50.00 | €0 | €50.00 | Needs decision |
| €60.00 | €15 | €45.00 | Needs decision |
| €60.00 | €5 | €55.00 | Yes |
A good tester knows the difference between a question and a bug
This becomes important when requirements are unclear.
Suppose a newly implemented feature behaves differently from what QA expected.
That does not automatically make it a defect.
If expected behaviour has never been agreed, the first result may simply be: we need a decision.
That distinction prevents unnecessary friction between QA and Development.
Instead of immediately writing “Bug: blocked user can duplicate an offer,” a better first conversation may be: “Current behaviour allows blocked users to duplicate an existing offer. The requirement says blocked users cannot manage offers, but duplication is not specified. Should duplication be treated as creation and therefore blocked?”
Now there is something concrete to decide.
Once the intended rule is confirmed, any mismatch becomes a clear defect.
This is also why QA language matters.
When evidence is incomplete, phrases such as “expected behaviour is unclear,” “based on the existing rule,” or “needs business confirmation” are more accurate than pretending certainty exists.
Do some investigation before asking Product
There is another extreme.
Some testers encounter an unclear requirement and immediately send it back with: “Requirements unclear. Please clarify.”
That is safe, but it is not especially useful.
A stronger QA approach investigates first.
Look at existing behaviour, similar features, API responses, designs, previous tickets, existing tests, product terminology, related business rules and historical defects.
Then ask a narrower question.
Compare “What should happen when the account is blocked?” with: “Exchange currently rejects offer creation for blocked users, but Lending still allows create and edit. Both allow viewing existing offers. Should the intended rule be read-only access across both products, with create, edit, duplicate, enable, disable and delete blocked?”
The second question is much easier to answer.
Good QA does not simply transfer uncertainty to someone else.
It reduces it first.
Sometimes the product itself is unclear
Sometimes the missing requirement is not a documentation problem.
Nobody has decided yet.
A Product Manager may understand the main feature but genuinely not know how an unusual state should behave. A designer may not have considered an error condition. Development may discover a technical limitation that changes the original idea.
This is normal product development.
The danger comes when open questions silently become implementation decisions because someone has to keep moving.
A developer chooses one behaviour. QA tests what exists. Later Product sees it and asks why it works that way.
The answer is often that nobody ever decided.
A useful QA process makes those unresolved decisions visible while they are still cheap to change.
Bring the right people into the same conversation
Unclear requirements rarely become clearer because one person writes a longer Jira comment.
Sometimes the fastest solution is getting Product, Development and QA together for ten minutes.
Product understands intent.
Development understands implementation and constraints.
QA thinks about behaviour, risk and what happens outside the happy path.
A simple conversation may go like this:
Product: blocked users should not create new offers.
Developer: does that include duplicating an old offer?
QA: and what about editing or enabling an existing disabled offer?
Product: they should be able to view existing offers, but not make any changes.
Now the requirement is much stronger than where it started.
Not because QA wrote more documentation.
Because the right question triggered a decision.
Use test design to discover missing requirements
Test-design techniques are useful even before formal testing starts.
Imagine a status flow: Pending → Approved → Rejected.
It looks simple until QA starts mapping the states.
Can Rejected return to Pending? Can Approved become Rejected? Who can trigger each transition? What happens if two admins update it simultaneously? Can the user act while it is Pending? What notifications are sent? What happens to active sessions?
The test design is exposing missing product design.
The same principle applies to boundary-value analysis, decision tables, state-transition diagrams, role and permission matrices, pairwise combinations, data-flow diagrams and API contract examples.
This is one of the reasons QA can be useful before a feature is complete.
Testability forces vague ideas to become observable behaviour.
A simple example: users can change their email
Imagine the entire requirement is: “Users can change their email.”
A weak test opens account settings, enters a new email, saves it and confirms the value changed.
That proves the happy path.
It does not define the feature.
A stronger QA discussion asks whether the old email receives a notification, whether the new email must be confirmed, whether the same email can belong to another account, what happens to active sessions, whether blocked users can change email, whether confirmation links expire, whether resend works and which address receives notifications while confirmation is pending.
This is the difference between testing a screen and understanding a feature.
When should QA stop asking questions?
There is a balance.
QA can become a bottleneck by demanding every theoretical detail before anyone moves.
Not every ambiguity deserves a workshop. Not every edge case deserves a new business rule. Not every sentence needs to be perfectly formal.
A useful question is: could different reasonable interpretations produce meaningfully different product behaviour?
If yes, clarify it.
Another useful question is: would getting this wrong create significant user, business, security, data or support impact?
If yes, clarify it early.
But if the uncertainty is trivial, reversible and low risk, the team may reasonably proceed with a sensible convention.
The goal is not perfect documentation.
The goal is shared understanding where it matters.
A practical QA approach for unclear requirements
When a feature arrives without enough detail, the process does not need to be complicated.
First understand the intent. Why does the feature exist and what problem is it solving?
Then inspect what already exists: similar flows, APIs, designs, tests and historical behaviour.
Identify specific gaps instead of saying only that the requirements are unclear.
Build concrete examples. Look at boundaries, failures, empty states, expired states, duplicate actions and concurrency.
Check connected features and separate assumptions from facts.
Ask the right person: Product for intent, Design for user experience, Development for technical constraints.
Then record the decision and test the agreed behaviour.
Consistently doing this changes QA from someone who only checks completed work into someone who improves the quality of the work before it is finished.
Good requirements are not the same as long requirements
One thing QA should avoid is responding to ambiguity by creating enormous specifications.
Long documentation can still be unclear.
A short requirement with three excellent examples may create more shared understanding than several pages of abstract language.
The goal is not more words.
The goal is fewer different interpretations.
Where Laidoner Solutions helps
Laidoner Solutions helps software teams improve product quality through practical QA testing, API validation, automation support, localization QA and clear defect reporting.
Unclear requirements are a good example of why QA adds value before formal testing begins.
The work can include reviewing requirements for missing behaviour, checking roles and states, validating API and UI consistency, creating concrete examples, identifying risky assumptions and documenting agreed behaviour before it becomes expensive to change.
The goal is not to create more process.
The goal is to reduce avoidable ambiguity and help Product, Design and Development work from the same understanding.
Final thoughts
When requirements are unclear, good QA does not pretend the uncertainty does not exist.
It also does not sit still waiting for somebody else to solve it.
Good QA investigates what is already known, understands why the feature exists, looks at the surrounding product, identifies where different interpretations matter, creates concrete examples, asks focused questions and gets important decisions recorded.
Sometimes that process discovers a bug.
Sometimes it discovers a missing requirement.
Sometimes it reveals that two teams have been working from completely different assumptions.
And sometimes the most valuable thing QA does is ask one question early enough that the bug never needs to exist.
Testing is not only about proving whether implementation matches a requirement.
Sometimes QA helps the team understand what the requirement actually needs to mean.
Sources and further reading
- James Bach — Risk and Requirements-Based Testing
- Gojko Adzic — Specifying with Examples
- Martin Fowler — Specification By Example
- Ribeiro & Berry — Persistent Ambiguity in Software Requirements
- Requirements Engineering — State of Practice Across 12 Companies
- Requirements Engineering Magazine — Strengthening the Requirements Engineering Process
Need practical QA support?
Laidoner Solutions helps software teams with manual QA, API testing, localization review, release checks and clear defect reporting.
Contact Us