Pre-Release Testing Checklist: What to Check Before You Ship

A practical checklist for the days before a release and the hours after it: scope, critical paths, integrations, migrations, rollback and the production check.

Most release problems aren’t hard bugs. They are things nobody checked: a payment webhook still pointing at the test account, a migration that was never run on real data, an old mobile app that breaks against the new API. A checklist won’t make a release safe on its own, but it stops the same avoidable mistakes from coming back.

This is the list we work through before and after a release. Copy it, cut what doesn’t apply to your product, and add what has bitten you before.

1. Know what is shipping

You can’t test a release well if you don’t know what is in it.

  • List every change: new features, bug fixes, dependency upgrades, configuration changes.
  • Mark the risky ones: anything that touches money, permissions, data structure or a third-party service.
  • Agree on the acceptance criteria for each new feature. “Done” should mean the same thing to the developer, the tester and the client.
  • Freeze the release candidate. Testing a build that keeps changing means testing nothing in particular.

2. Get the test environment right

Bugs that only appear in production usually come from differences between environments.

  • The test environment runs the same versions, configuration and services as production, with test credentials.
  • Test accounts exist for every role: a normal user, a second user to check data isolation, an admin.
  • The test data looks like real data. An anonymised copy of the production database catches problems that ten neat sample records never will.

3. Test the new work

  • Each new feature against its acceptance criteria, including the error cases, not just the happy path.
  • Each bug fix: confirm the bug is gone, then test the area around it. Fixes often break their neighbours.
  • New screens on real phones and the browsers your users actually have.

4. Run the regression suite

  • The critical paths end to end: sign-up, log-in, the main action of the product, payment, password reset.
  • The automated regression suite is green. Don’t accept “that test is always red”.
  • Anything the release touched indirectly, such as shared components, shared database tables and shared APIs, gets a second look.

5. Check the integrations

Third-party services are where “it worked in test” most often fails.

  • Payments in test mode: success, failure, cancellation, refund, and a confirmation that arrives twice or late.
  • Emails, SMS and push notifications arrive, with the right content and links.
  • Webhooks and callbacks reach the right environment.
  • Database migrations run cleanly on a copy of production data, and you know how long they take.
  • Older clients still work. If you ship a mobile app, many users will keep the previous version for weeks. The new API must still serve it.

6. The non-functional checks

  • Performance: the key pages and API calls are no slower than in the last release.
  • Security basics: one user can’t reach another user’s data, admin functions need admin rights, and no secret keys are in the client code.
  • Accessibility basics: the main flows work with the keyboard, and text has enough contrast.

7. Prepare the release itself

  • Production configuration and environment variables are set and reviewed. A missing variable is one of the most common release failures.
  • Risky features are behind a feature flag, so they can be switched off without a new deployment.
  • There is a rollback plan, and someone knows how to run it. That includes what happens to data written after the migration.
  • Monitoring and error alerts are on, and someone is watching during and after the release.
  • The client has signed off on user acceptance testing (UAT).

8. Check production right after the deployment

A release that passed every test can still fail in production. Within minutes of the deployment:

  • Walk through the critical paths on the live product, with a real account.
  • Watch the error logs and monitoring for anything new.
  • Confirm that payments, emails and other integrations work against the live services.
  • Report the result. We send a post-deployment report within two hours of the go signal, so everyone knows the release is healthy, or exactly what isn’t.

The short version

  • Know exactly what is shipping, and which changes are risky.
  • Test on an environment and with data that look like production.
  • Test the new work, run the full regression suite, and check every integration.
  • Run migrations on real data first, and keep older app versions working.
  • Have flags, a rollback plan and monitoring ready before you deploy.
  • Check production right after the deployment, and report the result.

Deciding which of these checks to automate? Read manual or automated testing: when to use which.

Have a release coming up?

Contact us