---
title: Launching a Product
description: Pre-launch checklist for shipping a public web product, from DNS to launch-day comms.
category: software
tags: [software, business]
version: "1.0"
updated: 2026-07-07
sources:
  - name: Stripe — Testing your integration
    url: https://docs.stripe.com/testing
  - name: Google Search Central — SEO Starter Guide
    url: https://developers.google.com/search/docs/fundamentals/seo-starter-guide
---

For taking a public web product live, with roughly two weeks of lead
time. Assumes the product itself works; this is everything *around*
the product that decides whether launch day is a good day.

## Two weeks before

- [ ] Turn on auto-renew and transfer lock for the domain `{essential}`
  An expired domain is a total outage plus a ransom negotiation.
  Set the registrant email to one that isn't hosted on the domain itself.
- [ ] Verify HTTPS works on both the apex and www, with one redirecting to the other `{essential}`
  Test `https://example.com` and `https://www.example.com` explicitly.
  Confirm certificate renewal is automated — expiry is the classic
  day-60 outage.
- [ ] Lower DNS TTLs to 300 seconds
  Launch-week DNS mistakes get fixed in five minutes instead of a day.
  Raise them again once things are stable.
- [ ] Install error tracking and confirm it receives a real event
  Throw a deliberate exception in production and watch it arrive.
  "Installed" and "working" are different claims.
- [ ] Set up analytics with 3–5 named events that define success
  Signup, activation, payment. Pageviews alone can't answer "is the
  product working?" on launch night.
- [ ] Add external uptime monitoring that pages your phone
  External — a monitor hosted in your own infrastructure goes down
  with it.
- [ ] Publish a privacy policy and terms of service `{when: collecting-personal-data}` `{essential}`
  An email address counts as personal data under GDPR and CCPA, and
  payment providers require published terms and a refund policy.
- [ ] Set up database backups and perform one restore `{essential}`
  A backup you have never restored is a hope, not a backup.

## One week before

- [ ] Make a real live-mode purchase with a real card, then refund it `{when: paid-product}` `{essential}`
  Test cards prove the code; a live charge proves the account — live
  API keys, webhook endpoints, tax settings, and payout details all
  differ from test mode.
- [ ] Verify webhooks for failed payments and disputes are handled `{when: paid-product}`
  The unhappy payment paths are where money silently leaks.
- [ ] Write unique titles and meta descriptions for every public page
  The title tag is your search listing and your browser-tab label;
  60 characters that do real work.
- [ ] Add Open Graph tags with a 1200×630 image, then paste the URL into Slack to check
  Every launch link preview — on X, Slack, LinkedIn, iMessage — is
  rendered from these tags. Test the render, not the markup.
- [ ] Add robots.txt and sitemap.xml, and submit the site to Search Console
  Also confirms nothing is accidentally set to `noindex` — a common
  leftover from staging.
- [ ] Confirm transactional email lands in the inbox, not spam
  Signup confirmation and password reset, tested against Gmail and
  Outlook. SPF, DKIM, and DMARC records are the difference.
- [ ] Run a load sanity check at 10x expected launch traffic
  Not a full load test — one script hammering the homepage and signup
  flow. A Hacker News front page can send tens of thousands of visits
  in a few hours, most of them in the first one.
- [ ] Add rate limiting to signup and any expensive endpoint
  Bots find open signup forms within hours of launch, not days.

## The day before

- [ ] Freeze deploys of anything not launch-critical
  Launch day is the worst possible day to debug an unrelated change.
- [ ] Run a fresh-eyes signup on someone else's machine
  Incognito, no saved state, ideally someone who has never seen the
  product. Your own browser has been hiding onboarding bugs for months.
- [ ] Remove test accounts, debug endpoints, and staging credentials from production `{essential}`
- [ ] Verify the support channel works and someone is watching it
  Send a test message to the support address and confirm a human sees
  it. Launch-day replies within the hour convert complainers into fans.
- [ ] Write the launch posts in advance
  The announcement, the Show HN text, the social posts. Launch-morning
  adrenaline writes bad copy.

## Launch day

- [ ] Smoke-test the critical path one final time before announcing `{essential}`
  Signup, core action, payment. Five minutes, before the traffic
  arrives rather than with it.
- [ ] Post the announcements and stay in the threads
  Founders answering questions in the comments measurably improves
  how a launch goes; a link-drop reads as spam.
- [ ] Watch the error tracker and dashboards through the day
  New traffic exercises paths no test found. Triage in real time —
  launch-day bugs fixed within hours barely count as bugs.
- [ ] Confirm real transactions are arriving in the payment dashboard `{when: paid-product}`
  Watching the code isn't the same as watching the money.
- [ ] Capture every piece of user feedback somewhere durable
  Launch-day feedback is the most honest you will ever get, and it
  evaporates from your memory within a week.
