In this article 12 sections
An AI-built app is ready for a first customer cohort when its core journey works with real permissions, failures can be detected and recovered from, and someone owns its operation. Verify access control, payments, data recovery, accessibility and deployment before expanding access. A convincing demo proves only the path you demonstrated.
The screen looks finished. The sign-up button works. You can create a record, generate a useful answer and show the result to a friend. That is a meaningful milestone. It is also a narrow test: one person, one account, one route through the application.
The next stage is proving that the product behaves sensibly when the conditions change. The checklist below applies whether the code was written by a person, an AI tool or both. It is a release-planning aid, not a security certification. Higher-risk products need a review appropriate to the data and actions they handle.
1. Prove who can see and change what#
Create separate test accounts with realistic roles. Try to view, edit, export and delete another account’s records. If the product has organisations, repeat the exercise across organisation boundaries. Changing a URL or record identifier should never be enough to cross a permission boundary.
Check permissions on the server or data service, not only in the interface. Hiding an admin button does not enforce access. Confirm that privileged keys remain outside public browser code and that former team members can lose access cleanly. OWASP ASVS provides a structured basis for verifying application security controls; use it to make the scope of a technical review explicit.[1]
2. Make transactions survive retries#
A slow network can make a user press a button twice. An external service can retry a notification. Your application should have a deliberate answer to both. Test duplicate submissions, delayed responses and interrupted checkout. Check which system is authoritative when the browser and payment provider disagree.
Stripe documents that webhook events can be duplicated and are not guaranteed to arrive in generation order.[2] If you use Stripe, verify webhook signatures and design processing so repeated events do not repeat the business action. For other providers, check their own delivery guarantees. A happy-path payment test is not sufficient evidence of a reliable order flow.
3. Restore data, not just create a backup#
Identify what the business could lose: customer records, uploaded files, configuration and access to third-party accounts. Document where the recovery copies live and who can use them. Then restore a representative copy into an isolated environment and verify that the important relationships and files are usable.
Choose a tolerable amount of data loss and a tolerable recovery time for this release. Those are business decisions, not default settings to discover during an incident. Check how a restore interacts with external events such as payments that occurred after the backup. Assign someone to reconcile that gap.
4. If the product uses AI, bound what it can do#
Building with AI and shipping an AI feature are separate choices. If your app calls a model, define which outputs are advisory and which can trigger an action. Treat external text, uploaded documents and model output as untrusted input. A retrieved document should not be able to grant a tool new permissions.
Evaluate the feature on realistic tasks, including ambiguous requests and information it should refuse to invent. Record the model configuration and evaluation cases so a change can be compared with a baseline. Put limits on spend, tool access and repeated attempts. Give the user an understandable recovery route when the model cannot finish.
If you are deciding how much autonomy to allow, our agent versus automation guide explains the difference between a predefined process and a model choosing its next action.
5. Check the experience without your own setup#
Try the main journey on a narrow screen, with a keyboard and at increased text size. Make sure labels are understandable, focus is visible and errors explain what to fix. Do not rely on colour alone to communicate status. Include people using assistive technology in the evaluation when possible.
WCAG 2.2 supplies the formal accessibility reference.[3] These checks catch obvious problems, but completing them is not a claim of full conformance. Also test a slow connection, an empty account, long names and realistic quantities of data. The owner’s perfectly prepared account is usually the easiest case.
6. Practise operating the product#
| Area | Demonstration | Owner to name |
|---|---|---|
| Deployment | Deploy a change and return to a known working version | Release owner |
| Monitoring | Trigger a test failure and confirm the alert reaches a person | Incident responder |
| Recovery | Restore representative data and verify the result | Data owner |
| Access | Remove a team member without breaking the service | Account administrator |
| Support | Report a problem and follow it to resolution | Customer support owner |
| Billing | Check spend limits and explain recurring charges | Budget owner |
Keep the repository, hosting and essential service accounts under business control. Write down the minimum steps to deploy, recover and rotate credentials. A technically capable contractor is still a single point of dependency if nobody else can reach the account.
7. Use a release decision, not a feeling#
For each check, record the evidence, the owner and any remaining limitation. Block release on failures that could expose another customer’s data, create uncontrolled charges or leave the team unable to recover important information. Other limitations may be acceptable for a small, clearly briefed pilot if there is a workable fallback.
After release, review real failures and support requests alongside successful completions. Expand access when the evidence supports it. The aim is not to eliminate every possible defect before anyone benefits. It is to know what you are releasing, what could fail and who will act when it does. The wider MVP build process connects this operational work to the user problem you set out to solve.
Use a release evidence sheet#
Assign an owner to each check and record the environment, date, result and supporting evidence. Choose representative test accounts and data. Do not run destructive scenarios against customers’ live records. A check passes because the expected behaviour occurred, not because someone ticked a box.
| Scenario | Exercise | Passing result |
|---|---|---|
| Cross-customer access | Attempt to open another test account’s record by ID | The server denies access without leaking fields |
| Revoked membership | Remove a member and retry using the existing session | Access follows the documented revocation policy |
| Duplicate event | Repeat a submission and replay a payment event | One intended business transition; duplicates handled |
| Lost browser return | Interrupt the return after a successful payment | Order and payment reconcile without a second charge |
| Dependency outage | Make a test dependency unavailable | Bounded retry, accurate status and a recovery route |
| Recovery | Restore representative records and files in isolation | Relationships remain usable; time and data gap recorded |
| Deployment failure | Exercise rollback with the relevant database change | A known working state or documented forward repair |
| Support | Submit a test incident through the customer route | The named responder receives useful context |
Where a check is not applicable, record why. Where it fails, state the affected journey and decision: fix before release, reduce pilot exposure, or explicitly accept a limited issue with an owner and date. Do not label an unresolved access or payment integrity failure as a cosmetic defect.
Separate AI-written software from AI behaviour at runtime#
An application can be written with AI assistance without sending customer tasks to a model after launch. In that case, normal application behaviour still needs verification. If a model reads documents or uses tools at runtime, add tests for its permissions, uncertainty and response to untrusted content.
OWASP’s prompt-injection guidance describes how instructions inside external content can affect model behaviour. Test a permitted sample document containing instructions to ignore the task or perform an unauthorised action. The document must not gain the power to change account permissions or approve a transaction.
Also test missing evidence, conflicting records, tool timeouts and usage limits. Record what the system is allowed to do without review and where it must stop. A good-looking answer does not demonstrate that a tool action was permitted or correct. The agent evaluation guide provides a starting test set.
Put this guide to work#
Frequently asked questions#
Does passing this checklist mean the app is secure?
No. It records a useful set of release checks, not a complete security assessment or certification. Review depth should match the system, data and exposure. A product can pass these examples and still contain vulnerabilities outside their coverage.
Do I need a specialist review because AI wrote the code?
Assess the application’s consequences, complexity and the team’s ability to verify it. Sensitive data, money movement or unfamiliar security architecture may justify specialist review regardless of how the code was produced. The origin of the code does not replace evidence about its behaviour.
What should block even a small pilot?
Treat failures that expose another customer’s data, lose or duplicate consequential transactions, or leave the team unable to recover a broken service as release decisions requiring resolution. Narrowing the pilot can reduce exposure, but should not disguise a known failure in the core promise.
Is having a backup enough?
No. Test that a representative backup can be restored and used, including relevant files and relationships. Record the recovery duration and the possible data gap. An untested backup is an assumption about recovery rather than evidence.
What if the app uses no AI after deployment?
The checks for accounts, transactions, accessibility, recovery and operation still apply. Model behaviour and prompt-injection checks apply where a model actually handles inputs or actions at runtime. Keep those two cases distinct.
Sources and methodology#
This guide combines editorial analysis with the linked primary sources. Decision frameworks, worksheets and worked examples are our own; examples are illustrative unless explicitly identified as supplier claims or published research. We have not conducted original interviews, comparative supplier testing or a controlled experiment for this article.
- OWASP Application Security Verification Standard ↗
A framework for verifying application security controls, not a certification conferred by this checklist.
Accessed 16 October 2026 - Stripe: Receive Stripe events in your webhook endpoint ↗
Primary documentation on webhook verification, duplicate events and delivery ordering.
Accessed 16 October 2026 - W3C: How to Meet WCAG 2.2 ↗
Reference for accessibility requirements. A short manual check is not a complete conformance assessment.
Accessed 16 October 2026 - OWASP: prompt injection ↗
Primary risk guidance for instructions embedded in external content. Our examples are proposed checks, not results of a penetration test.
Accessed 16 October 2026
Source check: 16 October 2026. Platform documentation can change. Published as part of our editorial collection.
Expanded 16 October 2026 with practical decision material, downloads and topic-specific answers. Supplier and platform claims are identified by their linked sources.
MVP Build Editorial. “Your AI-built app works. Is it ready for real customers?.” MVP Build, 16 October 2026.
https://mvpbuild.xyz/technology/ai-app-production-checklist/