Skip to content

A Feature Is Not Finished Because the Developer Says It Is

By Tomasz Lewandowski · 9 Jul 2026 · 7 min read

A Feature Is Not Finished Because the Developer Says It Is
Working With App Developers — Testing and Acceptance

At some point in almost every app-development project, a business owner gets a message that reads something like: “Feature X is done – it’s been pushed to staging.” And shortly afterwards, they log in, find it doesn’t quite work the way they expected, and a difficult conversation begins.

Neither party is lying. The developer has written the code and it runs without errors. The business owner had a picture in their head of how the feature should behave that was never fully written down. Both are acting in good faith. The problem is that they were measuring done against different rulers.

This is one of the most common sources of friction in software projects – and one of the most avoidable. The fix is not to mistrust your developer or become a technical expert. It is to agree, in advance and in plain English, on exactly what done means for each feature before anyone writes a line of code.

Done must mean that the feature works for the business – not merely that the code has been written.

The Four Stages Between ‘Coded’ and ‘Released’

Releasing a feature is not a single event – it is a ladder with at least four distinct rungs. Most disputes happen because people assume everyone is on the same rung at the same time.

  • Coded. The developer has written the logic and it behaves correctly in their local environment. This is the starting point, not the finish line.
  • Tested. The code has been verified against agreed criteria – ideally by both developer (automated tests) and business owner (manual, real-world scenarios).
  • Approved. The business owner or product lead has formally signed off. Approval is a decision, not an assumption – it should exist as a written record.
  • Released. The feature is live for end users. Even after approval, releases can be staggered or gated, so ‘approved’ and ‘released’ are worth treating separately.

When a developer says something is done, they almost always mean coded. When a business owner hears done, they usually picture released. Closing that gap is a shared responsibility.

What Good Acceptance Criteria Look Like

Acceptance criteria are the written conditions a feature must meet before it can be signed off. They do not need to be technical. The best ones are written by the business, because they describe what the user needs to be true – not how the code achieves it.

Even simple statements work well for most SME projects:

  • “A new customer can register using their email address and receive a confirmation email within two minutes.”
  • “The monthly report shows total sales, broken down by product category, for any calendar month I select.”
  • “If a booking is cancelled by the customer, the slot is immediately available for someone else to book.”

Notice what these have in common: they describe an outcome a real person would care about, they are specific enough to test, and they leave no ambiguity about what ‘working’ means. Compare that with “the booking system should work properly” – which can mean almost anything to a developer under time pressure.

Write your acceptance criteria in the language of your business, not the language of code. If you can test it with a browser and a notepad, it’s written correctly.

Why the Business Must Test Real Scenarios

Developers test that their code does what they intended. Business owners need to test that the feature does what the business needs. These are not the same thing, and developer testing cannot substitute for the latter.

This is not a criticism of developers. They test against the specification they were given. If that specification was incomplete – or existed only in someone’s head – testing will be incomplete too.

User acceptance testing doesn’t need to be formal. It means actually using the feature the way a real customer or staff member would, including awkward edge cases:

  • What happens if someone submits the form twice?
  • What does the error message say if the postcode is in the wrong format?
  • Can someone on a mobile phone complete the whole journey without getting stuck?

These are scenarios that slip through developer testing – not through negligence, but because the developer has never answered your customer calls or watched someone struggle with a web form at a trade show. You have. That knowledge is your contribution to quality.

How to Record Issues Without Blaming People

When testing turns up problems – and it usually does – the way you report them matters. Vague feedback like “it doesn’t work” creates defensiveness and wastes time. A simple format removes both problems:

  • What I was doing. Exact steps from a clear entry point. “I logged in as a new user, went to My Orders, clicked the June invoice.”
  • What I expected. Based on agreed criteria. “I expected to see a PDF download.”
  • What actually happened. Specifically, not evaluatively. “I got a blank white page.”
  • Evidence. A screenshot or short screen recording (Loom’s free tier works well) removes any remaining ambiguity.

This format contains no judgement. It doesn’t ask whose fault it is. It describes a gap between what was agreed and what exists – which is all a developer needs to reproduce and fix the problem.

Sign-Off as Protection for Both Sides

Formal sign-off sounds bureaucratic, but it is one of the most relationship-preserving steps in a project. Without it, the question of whether a feature was delivered correctly can fester for months – surfacing awkwardly when the next invoice arrives or something breaks in production.

Sign-off doesn’t need to be a formal document. An email saying “I’ve tested the booking flow against our agreed criteria and I’m happy to release it – please go ahead” is perfectly sufficient. What matters is that it exists, is explicit, and both sides have a copy.

For the business owner, sign-off is protection against scope creep – the temptation to say “while we’re at it, can you add X?” without recognising that X was never part of the agreement. For the developer, it is protection against being held responsible for problems arising from changes made after they delivered the agreed work.

Sign-off is not a formality. It is the moment a feature stops being the developer’s responsibility and becomes the business’s asset.

Practical Steps to Get This Right

  • Write acceptance criteria before development starts. For every feature, complete the sentence: “This feature is done when…” Keep it specific and share it with the developer before work begins.
  • Use a simple tracker for the done ladder. A Google Sheet or Trello board with columns for Coded / In Testing / Approved / Released is enough. Nothing should jump from Coded to Released.
  • Block time for testing. UAT is not something you fit between meetings. Schedule a dedicated hour or two per sprint to test real scenarios before sign-off.
  • Use screen recording for bug reports. Loom’s free Starter plan lets you record a short clip and share a link. A ninety-second video is worth three paragraphs of description.
  • Make sign-off an explicit action. Agree that no feature goes live without a written approval – a message, an email, a ticket comment. Silence is not sign-off.

Start With One Feature

If none of this is in place on your current project, start small. Pick one feature about to go into development and write down what done means for it. Complete the sentence: “This feature is done when…” Share that list with your developer, ask them to confirm it’s achievable, then test against it and make your sign-off explicit.

Do that once and you’ll see how much clearer the conversation becomes. Do it consistently and you’ll spend far less time in post-delivery disputes – and far more time shipping features that genuinely work for your business.

How to agree what 'done' means for a software feature

  1. Write acceptance criteria before development starts. For every feature, complete the sentence 'This feature is done when…' in the plain language of your business, keeping each statement specific and testable. Share it with the developer before any code is written and ask them to confirm it is achievable.
  2. Track the feature along the done ladder. Use a simple tracker — a Google Sheet or Trello board with columns for Coded, In Testing, Approved and Released — to show where every feature is. Nothing should jump from Coded straight to Released.
  3. Block dedicated time to test real scenarios. Schedule a dedicated hour or two per sprint for user acceptance testing rather than fitting it between meetings. Actually use the feature the way a customer or staff member would, including awkward edge cases such as submitting a form twice, an incorrectly formatted postcode, or completing the journey on a mobile phone.
  4. Report any issues with a no-blame format. For each problem record what you were doing (exact steps from a clear entry point), what you expected based on the agreed criteria, and what actually happened, stated specifically. Attach evidence such as a screenshot or a short Loom screen recording, as a ninety-second video is worth three paragraphs of description.
  5. Make sign-off an explicit written action. Agree that no feature goes live without written approval — a message, an email or a ticket comment such as 'I've tested it against our agreed criteria and I'm happy to release it.' Sign-off marks the point a feature becomes the business's asset, so silence does not count as approval.

Frequently asked questions

My developer says the feature is done but it doesn't work how I expected — who is right?

Usually neither party is wrong; you are measuring 'done' against different rulers. The developer means the code is written and runs without errors, while you pictured the feature live and working for the business. The fix is to agree in advance, in plain English, exactly what 'done' means for each feature before any code is written.

What are acceptance criteria and do I need to be technical to write them?

Acceptance criteria are the written conditions a feature must meet before it can be signed off, and they are best written by the business, not the developer. They describe what the user needs to be true, not how the code achieves it — for example, 'the monthly report shows total sales, broken down by product category, for any calendar month I select.' If you can test it with a browser and a notepad, it is written correctly.

Why should I test the software myself if the developer already tested it?

Developers test that their code does what they intended, but you need to test that the feature does what the business needs — these are not the same thing. Developers test against the specification they were given, so if that spec was incomplete or only existed in someone's head, their testing will be incomplete too. You should try real scenarios like submitting a form twice, entering a badly formatted postcode, or completing the journey on a mobile phone, because that customer knowledge is your contribution to quality.

How do I report a bug to my developer without it turning into a blame game?

Use a simple four-part format that contains no judgement: what you were doing (exact steps from a clear entry point), what you expected (based on the agreed criteria), what actually happened (specifically, such as 'I got a blank white page'), and evidence. A screenshot or a short screen recording — Loom's free tier works well — removes any remaining ambiguity and gives the developer everything they need to reproduce and fix the problem.

Is formal sign-off really necessary for a small project?

Sign-off does not need to be a formal document — an email saying 'I've tested the booking flow against our agreed criteria and I'm happy to release it, please go ahead' is perfectly sufficient. What matters is that it is explicit and both sides have a copy. It protects you against scope creep and protects the developer from being blamed for problems caused by changes made after they delivered the agreed work; silence is not sign-off.

Where do I start if none of this is in place on my current project?

Start small with a single feature. Pick one feature about to go into development and complete the sentence 'This feature is done when…', writing as many specific, testable completions as the feature requires. Share that list with your developer, ask them to confirm it is achievable, test against it, and then make your sign-off explicit.

Share Follow
The Business Must Test the App, Not Merely Look at It
Working With App Developers

The Business Must Test the App, Not Merely Look at It

Visual sign-off isn't testing. Learn how to write real test scenarios from your own business transactions, handle exceptions, record bugs clearly, and protect your customers from a rough launch.

15 Jul 2026 · 8 min read
Do Not Start With an App. Start With the Job It Must Do
Working With App Developers

Do Not Start With an App. Start With the Job It Must Do

Before briefing a developer, ask the harder question: what operational problem are you actually solving? A one-page problem brief prevents six months of expensive wandering.

6 Jul 2026 · 8 min read
Your Developer Is Not a Mind Reader
Working With App Developers

Your Developer Is Not a Mind Reader

Most app projects go wrong before a line of code is written. Learn how to turn a clear idea into a buildable brief — with examples, sketches, and a one-page framework.

3 Jul 2026 · 8 min read