Acceptance Testing and UAT: Who Actually Signs Off
Acceptance testing and UAT are the only testing defined by who signs off, not what they cover. Here's how to write cases each signer will actually approve.

A QA lead at a payments startup spends the last week before a release chasing signatures, not bugs. The test cases are done. The regression suite is green. What is missing is a business owner willing to say, in writing, that the refund flow works the way finance expects. That chase, not the testing itself, is what acceptance testing and UAT are actually about, and most teams have never had anyone explain why it works this way.
Acceptance testing is the broad practice of checking that a system meets agreed requirements before it is considered done. User acceptance testing, or UAT, is the specific version of that practice where the people doing the checking are the actual business users or customers who will live with the result. Every UAT session is acceptance testing. Not every acceptance test session is UAT, because a regulator or a contract clause can also be the party that has to sign off.
The one test type defined by who signs, not what it touches
Every other kind of testing in this glossary is defined by what it exercises. A regression suite is defined by what it protects. An edge case is defined by the input that triggers it. Acceptance testing is different. It is defined entirely by who has the authority to approve the result.
The test steps might look identical to a normal functional case. What changes is the name at the bottom of the record. This matters because it flips the usual order of writing a test case. Most cases start with a scenario and end with an expected result. An acceptance case starts with a person: who has to be satisfied, and what would make them say yes. The scenario is built backward from that answer.
Compare this to a regular functional case for the same feature. A functional case for a saved card checkout would list every input variation: an expired card, a declined card, a card with insufficient funds. An acceptance case skips almost all of that. It shows the one scenario the signer actually cares about, written so they can approve it without needing to understand the variations underneath.
Who actually signs, and why the case has to change for each one
Three kinds of people commonly hold that authority, and each one reads a case differently.
- A business owner reads for outcome. They want to see that the refund lands in the customer's account and the balance updates, not the API call that produced it.
- A customer or end user, in a UAT round, reads for their own workflow. They will approve a feature that technically has bugs if it lets them do their job, and reject one that is technically correct but awkward to use.
- A regulator or compliance reviewer reads for evidence. They want a record that shows the requirement, the test, and the result lined up, often months after the release shipped.
Writing one acceptance case to satisfy all three rarely works. A case written for a regulator is too dense for a business owner to skim in a five minute review. A case written for a customer's UAT session skips the paper trail a regulator needs.
Teams that write a single generic acceptance case, then hand it to whoever is available that week, are usually the ones stuck rewriting it later. The rewrite is not a small tax either. It means the business owner has to re-review a case they already approved once, and the release calendar slips while that second review gets scheduled.
Why the same case fails when it is written for the wrong signer
Picture a QA lead who writes one acceptance case per requirement and sends it to whoever is free that week. A regulator gets a case written in the loose, outcome focused language meant for a business owner. It gets rejected. Not because the feature is broken, but because there is no line linking the case back to the specific compliance requirement it was meant to satisfy.
Now the case has to be rewritten. The business owner has to re-approve the reworded version. The release that was supposed to ship on Thursday slips to the following Tuesday, and nobody on the team can point to a single bug as the reason why.
This is not a hypothetical. It is the normal cost of treating acceptance testing as one generic step at the end of a sprint, instead of three different conversations with three different audiences. The fix is not more testing. It is writing the case with the actual signer in mind from the first draft, which takes the same amount of time as writing a vague one and avoids the rewrite entirely.
A short checklist before you send a case for sign off
- Does the case name the specific person or role who is approving it, not just "stakeholder"?
- Does the language match what that person actually reads day to day, whether that is compliance language, plain outcome language, or their own workflow?
- Is there a line that ties the case back to the original requirement or regulation it is meant to satisfy?
- Is there a clear place for a name, a date, and a signature, so the approval is unambiguous later?
- If this case were pulled up in an audit eighteen months from now, would it still make sense on its own?
Running a case through that list before sending it out catches most of the rewrites before they happen. It takes about five minutes, which is cheap next to a slipped release.
What survives after the signature
Once the signature happens, the test itself mostly stops mattering. What survives is the approval record: who signed, what they were shown, and when. That record becomes the artefact an audit will actually ask for later, not the underlying test steps.
This is the same record that feeds into a project's audit trail, where every requirement needs a documented, traceable approval behind it. Good acceptance criteria written earlier in the process make this record easier to produce. When the requirement the signer is approving against was already clear before the case was written, the approval itself becomes a formality rather than a debate.
A test case management tool that keeps the case and its sign off in the same place is worth the switch. The alternative, a case in one tool and an email approval in another, means reconstructing that history from someone's inbox six months later. Keeping them together is the difference between finding the record in thirty seconds and losing an afternoon to it.
Writing the acceptance case a non-tester will actually sign
Take a payments example: a checkout flow adding support for saved cards. Here is what an acceptance case looks like when it is written for the business owner who has to approve it, not for a tester who already knows the system.
Requirement: A returning customer can pay with a previously saved card without re-entering the card number.
What the business owner needs to see: The customer selects a saved card at checkout, confirms the payment, and the order completes with the correct amount charged to that card. The customer's saved card list still shows the same card afterward, unchanged.
Steps written in plain language:
- Log in as a returning customer with one saved card on file.
- Go to checkout with an order total of 42.50.
- Select the saved card and confirm payment.
- Confirm the order status shows paid and the charge amount matches 42.50.
- Confirm the saved card is still listed correctly in account settings afterward.
Sign off line: "I confirm this matches how a returning customer should be able to pay, and the amount charged is correct." Name, date, signature.
Notice what is missing: no API endpoint, no HTTP status code, no database table. A business owner does not need those to trust the result, and including them would only slow the review down. That is the entire discipline of writing for acceptance. Strip out everything the signer does not need to trust the answer, and the case reads in under a minute instead of five.
Questions people ask
Is UAT the same thing as acceptance testing?
UAT is one form of acceptance testing, specifically the round where actual business users or customers do the approving. Acceptance testing more broadly can also involve regulators or contract based sign off, not only end users.
Who should write acceptance test cases, developers or QA?
Either can draft them, but they should be reviewed with the actual signer in mind. A QA lead who knows what the business owner cares about will write a better acceptance case than one written purely from the technical spec.
Does passing UAT mean the software is bug free?
No. UAT confirms the software meets the business need well enough to approve, not that every possible defect has been found. Bugs can and do surface after UAT sign off.
How is an acceptance case different from a regular functional test case?
The steps can look similar, but an acceptance case is written around what the signer needs to see to approve it, and it produces a formal approval record as its output.
Can Tesbo handle legal sign off or e-signature compliance?
No. Tesbo documents the test case and records who approved it, but it does not provide legally binding e-signature or regulatory certification. Treat it as documentation, not as a compliance product.
Most teams treat the final sign off as paperwork bolted onto testing that already happened. Written this way, the sign off is the point, and the case is just the document that earns it. Once that flips, writing an acceptance case for the right person the first time saves the rewrite nobody budgeted for the week before release.
Try Tesbo, or get the next useful idea
Start building your testing workflow now, or get one practical email a month.
Start freeOne email a month
What we shipped, what we learned, and the occasional infographic worth pinning. Unsubscribe in one click.


