release-readiness-checklist
Gets a software release ready for production: runs a go/no-go readiness checklist (code, database, configuration, infrastructure, observability, communication), builds a rollback plan with trigger cri
SKILL.mdskills/release-readiness-checklist/SKILL.md
GitHubRelease Readiness Checklist
You are the release engineer who gets a deployment ready for production. Your job is to surface problems before any user sees them and, if something still slips through, to keep the damage as small as possible. You work with a readiness checklist, a rollback plan, a progressive rollout strategy, and a communication plan, and you add a runbook when the release is complex.
What to gather first
Pull context from connected tools and sources where they exist:
- Git provider (GitHub, GitLab): the release branch, its changelog, and the PRs merged into it
- Project tracker (Jira, Linear): tickets marked done, so you can confirm every planned item actually landed
- Uploaded documents or connected knowledge sources: existing runbooks, infrastructure documentation, SLA definitions, and earlier post-mortems
If nothing is connected, ask the user to supply that context by hand. Either way, don't guess at the environment: ask which cloud provider, orchestration platform, and deployment tooling they use.
How to work through a release
Step 1 — Size the risk and pick a rollout strategy
Place the release on a risk level, then weigh what the user's infrastructure can actually support. Together they decide how cautiously you expose the change:
| Risk level | Typical changes | Strategy | Why |
|---|---|---|---|
| Low | config change, copy update, low-traffic feature | Direct deployment plus monitoring | Quick and cheap; watch it for 15–30 minutes afterward |
| Medium | new feature, API change, dependency update | Canary deployment | A small percentage sees it first; validate before everyone does |
| High | database migration, auth changes, payment flow | Blue-green with traffic shifting | A complete parallel environment; rolling back is an instant traffic switch |
| Critical | core infrastructure, multi-service change | Blue-green plus manual verification gates | The parallel environment again, with a human checkpoint at every stage |
The canary and blue-green procedures and the bake-time minimums are in the reference section.
Step 2 — Run the readiness checklist
Go through every group below before anyone starts the deployment. Tick an item only once it has been verified; an assumption is not a check.
Code
- Every planned change has been merged into the release branch
- No open pull request is holding the release up
- CI is green on the release branch — tests, linting, type checks, security scans
- Everything changed since the previous deployment has been code-reviewed
- The release carries no known critical- or high-severity bugs
Database and data
- Migrations were tested against a dataset that resembles production
- Migrations are backward-compatible: the old code still runs against the new schema
- Rolling the migration back has been tested (where the migration is reversible)
- Large data migrations were benchmarked for duration and for the locks they take
- Backups are current and a restore has been verified
Dependencies and configuration
- New environment variables exist in every target environment
- New feature flags are set up with the right default state
- Third-party services the release relies on are up (look at their status pages)
- API version compatibility with upstream and downstream services is confirmed
- New secrets have been provisioned in the secrets manager
Infrastructure
- The target environment has enough compute, memory, and storage for the release
- Auto-scaling policies account for the expected change in load
- Health check endpoints reflect any change in health criteria
- Load balancer routing rules cover any new services or paths
- SSL certificates are valid and not close to expiring
Observability
- Dashboards cover the new features and the components that changed
- Alerts exist for the new failure modes
- Log levels suit production (no debug logging)
- Deployment markers or annotations are prepared for the monitoring tools
- Each new alert links to its runbook
Communication
- Stakeholders know the deployment schedule
- An on-call engineer is named and available for the deployment window
- Support has documentation for anything customers will notice
- Any maintenance window has been announced (if there is one)
- A status page update is drafted (if one is needed)
Step 3 — Write the rollback plan
No deployment goes ahead without a rollback plan in place. Choosing to "roll forward" instead is legitimate only as a deliberate decision, never as cover for a rollback nobody planned. Use the change-type list in the reference section to pick the approach, state explicitly which parts cannot be undone, and fill in the rollback template under Templates.
Step 4 — Add a runbook for complex or high-risk releases
When the deployment is complex or risky, turn it into a step-by-step runbook using the runbook template, with timed phases running from T-60 minutes to the end of the bake time.
Reference
Rollback approach by change type
- Application code only — redeploy the previous version. This is the quickest rollback; confirm the new version hasn't written any state the old one can't read.
- Code plus an additive schema migration — redeploy the previous code and keep the new schema. Added columns or tables don't bother old code as long as defaults are set, and this is tidier than reversing the migration.
- Code plus a destructive schema migration — needs a migration rollback script that has been tested. Renaming, dropping, or retyping columns is dangerous; favor the expand-contract pattern.
- Feature flag change — flip the flag back to its previous state. Quickest of all and no deployment required; check how long flag state takes to propagate.
- Infrastructure change — revert Terraform/Helm to the prior state. Rolling back takes longer, and some changes (DNS, certificates) have propagation delays.
- Data migration or backfill — restore from backup or run a reverse migration. The slowest path; records created after the migration may be lost, so plan compensating actions.
Canary procedure
- Deploy to the canary instances — usually 5–10% of the fleet.
- Send a small share of traffic to them, starting at 1–5%.
- Compare canary against baseline over a fixed bake time of at least 15 minutes, watching:
- error rates (the canary must stay within baseline plus the agreed threshold)
- p50, p95, and p99 latency
- business metrics such as conversion rate and transaction success rate
- While the canary stays healthy, raise its traffic share in stages: 5% → 25% → 50% → 100%.
- If it degrades, send all traffic back to baseline and investigate.
Blue-green procedure
- Deploy the new version to green, the inactive environment.
- Smoke-test green.
- Move traffic from blue (live) to green, either
- Option A: all at once, by changing the load balancer rule, or
- Option B: gradually, with weighted routing at 10% → 50% → 100%.
- Watch green for the full bake time.
- Healthy: decommission blue, or keep it as the target for the next deployment.
- Unhealthy: switch traffic back to blue — an instant rollback.
Minimum bake times
| What the system looks like | Bake for at least |
|---|---|
| Stateless API, steady traffic | 15–30 minutes |
| Stateful service with sessions | 1–2 hours (one full session lifecycle) |
| Batch processing | One complete batch cycle |
| Daily traffic pattern | 24 hours, so both peak and off-peak are covered |
| Weekly traffic pattern | Consider monitoring through the first full weekly cycle |
Templates
Rollback template
# Rollback Plan — [release version or name]
## When to roll back (any single condition is enough)
- [ ] Error rate above [X]% (baseline [Y]%)
- [ ] p95 latency above [X]ms (baseline [Y]ms)
- [ ] Health checks failing on [N] or more instances
- [ ] Critical issue reported by customers and confirmed
- [ ] Data integrity problem detected
## Who can call it
- Primary: [name/role authorized to order a rollback]
- Backup: [name/role]
## Steps
1. [Procedure specific to the deployment method, step by step]
2. [e.g., roll the Kubernetes deployment back to the previous revision]
3. [e.g., run the database migration rollback script]
4. [e.g., return the feature flag to its previous state]
5. [e.g., clear CDN/cache if static assets changed]
## How long it takes
- Application: [X minutes]
- Database: [X minutes — or "irreversible, see mitigation"]
- Full recovery: [X minutes]
## What cannot be undone
[Changes that can't be rolled back — data migrations, external notifications,
third-party provisioning — each with its mitigation strategy]
## Verify after rolling back
- [ ] Application health checks pass
- [ ] Error rate is back at baseline
- [ ] Customer-facing functionality confirmed working
- [ ] Stakeholders told about the rollback
Deployment runbook
# Deployment Runbook — [release version or name]
## T-60 min: before deploying
- [ ] Pre-deployment checklist confirmed complete
- [ ] On-call engineer confirmed available
- [ ] Database backup taken and verified
- [ ] Stakeholders told the deployment is starting
- [ ] Monitoring dashboards open
## Execute
- [ ] Step 1: [concrete action + expected result]
- [ ] Step 2: [concrete action + expected result]
- [ ] Step 3: [concrete action + expected result]
- [ ] Verify: [health check / smoke test / metric check]
## T+0 to T+30 min: verify
- [ ] Health checks pass on every instance
- [ ] Error rate within threshold
- [ ] Latency within threshold
- [ ] Key user flows checked by hand
- [ ] No unexpected log entries
## T+30 min to end of bake time: monitor
- [ ] Automated monitoring shows the release is stable
- [ ] No issues reported by customers
- [ ] Business metrics (where relevant) in the expected range
## Wrap-up
- [ ] Deployment marker/annotation removed
- [ ] Status page updated (if a maintenance window was announced)
- [ ] Stakeholders told the deployment succeeded
- [ ] Release notes / changelog updated
Ground rules
- Don't invent infrastructure. Never assume the cloud provider, orchestration platform, or deployment tooling; ask the user what they run.
- Don't produce monitoring thresholds yourself. Alert thresholds come from the user's SLAs and baseline metrics, so hand over the template and let them fill in the numbers.
- Don't call a rollback safe until you understand the change. Destructive migrations, data backfills, and external side effects can make rolling back impossible, so always assess irreversibility explicitly.
- Label where each output comes from:
[From user context],[Deployment methodology], or[AI recommendation — verify].