operations-deployment-checklist
Run a thorough deployment checklist before any release or configuration change reaches a cluster. Verify that all environment variables, secrets, config values, and infrastructure prerequisites are accounted for.
When to use
Use this skill when:
- Deploying a new version of a service to any environment (staging, production)
- Updating Helm values, Kubernetes manifests, or deployment configurations
- Introducing a new environment variable, secret, or config map entry in application code
- Changing infrastructure resources (replicas, resource limits, ingress rules)
- Rolling back a deployment
Instructions
Step 1: Detect configuration changes
Scan the diff. Compare the current changes against the deployed state. Identify any new or modified:
- Environment variables (in code,
.env files, Helm values, ConfigMaps, or container specs)
- Secrets references
- Config map entries
- Feature flags
- Service endpoints or URLs
- Resource limits (CPU, memory)
- Volume mounts or persistent storage
Cross-reference application code. If a new process.env.X, $_ENV['X'], os.environ['X'], or equivalent is introduced in application code, verify it has a corresponding entry in the deployment manifests.
Report findings. List every configuration addition or change detected. For each one, state:
- Name of the variable/secret/config
- Where it is consumed (file and line)
- Where it should be defined (Helm values, ConfigMap, Secret, etc.)
- Whether a default/fallback exists in code
Step 2: Ask the user to confirm values
For every new or changed configuration value, ask the user explicitly:
"Has <VARIABLE_NAME> been set in the target environment?"
- If it is a secret: "Has the secret been created/updated in the cluster's secret store?"
- If it has no default: "This variable has no fallback — the application will fail without it. Please confirm it is set."
"Is the value correct for this environment?" (e.g., staging URL vs. production URL)
"Does this value differ between environments?" If yes, confirm each environment has the correct value.
Do not proceed until the user confirms all configuration values are in place.
Step 3: Verify Helm/Kubernetes readiness
Helm values completeness. Verify all required values in values.yaml (or environment-specific overrides) are populated. Flag any that are empty, commented out, or set to placeholder values like TODO, CHANGEME, <replace>.
Image tag. Confirm the container image tag matches the intended release version. Flag if it points to latest in production.
Resource limits. Verify CPU and memory requests/limits are set. Flag containers without resource limits.
Replicas. Confirm replica count is appropriate for the target environment. Flag single-replica deployments in production without a justification.
Health checks. Verify liveness and readiness probes are defined. Flag any container without them.
Ingress/networking. If routes changed, confirm:
- DNS records exist or are planned
- TLS certificates are provisioned
- Network policies allow required traffic
Persistent storage. If volumes are added or resized, confirm the storage class exists and capacity is sufficient.
Step 4: Verify dependencies and ordering
Database migrations. If the deployment requires schema changes:
- "Have migrations been run (or will they run automatically on startup)?"
- "Are migrations backward-compatible with the currently running version?" (for zero-downtime deployments)
Dependent services. If the deployment depends on another service being updated first:
- "Has
<dependency> already been deployed with the required changes?"
- "Is the API contract between services compatible?"
Feature flags. If new functionality is behind a flag:
- "Is the flag configured in the target environment?"
- "Should it be enabled or disabled at deploy time?"
Step 5: Verify rollback readiness
"Can this deployment be rolled back safely?" Check for:
- Irreversible migrations
- Breaking contract changes with upstream/downstream services
- One-way data transformations
"Is the previous image/version still available?" Verify the prior version tag exists in the registry.
"Is there a runbook or known procedure for rollback?" If not, flag it as a risk.
Step 6: Final checklist confirmation
Present a summary checklist and require explicit user sign-off:
## Deployment Checklist — <service> → <environment>
### Configuration
- [ ] All new environment variables are set in the target environment
- [ ] All secrets are created/updated in the secret store
- [ ] Values are correct for this specific environment (not copied from another)
### Kubernetes/Helm
- [ ] Image tag points to the correct release version
- [ ] Resource requests and limits are defined
- [ ] Health checks (liveness + readiness) are configured
- [ ] Replica count is appropriate for the environment
- [ ] Ingress/DNS/TLS are configured (if applicable)
### Dependencies
- [ ] Database migrations are applied or will auto-run
- [ ] Dependent services are deployed and compatible
- [ ] Feature flags are configured
### Rollback
- [ ] Deployment can be rolled back without data loss
- [ ] Previous version is available in the registry
### Sign-off
- [ ] Engineer confirms: ready to deploy
Do not proceed with deployment until every applicable item is checked or explicitly marked as not applicable with a reason.
Step 7: Post-deployment verification
After the deployment is applied:
- Monitor pod status. Verify all pods reach
Running state and pass readiness checks.
- Check logs. Look for error-level log entries in the first 2–5 minutes.
- Smoke test. If a health endpoint or basic functionality check exists, run it.
- Alert the user if anything looks abnormal, even if pods are technically running.
Principles
- Never assume configuration is correct. Always verify explicitly.
- Err on the side of blocking. A delayed deployment is better than a broken one.
- Make the invisible visible. Surface every implicit dependency and assumption.
- One environment at a time. Never deploy to multiple environments simultaneously without explicit confirmation.
1---2name: operations-deployment-checklist3description: Runs a structured deployment checklist before applying changes to Kubernetes/Helm environments, verifying configuration, variables, and readiness.4---56# operations-deployment-checklist78Run a thorough deployment checklist before any release or configuration change reaches a cluster. Verify that all environment variables, secrets, config values, and infrastructure prerequisites are accounted for.910## When to use1112Use this skill when:1314- Deploying a new version of a service to any environment (staging, production)15- Updating Helm values, Kubernetes manifests, or deployment configurations16- Introducing a new environment variable, secret, or config map entry in application code17- Changing infrastructure resources (replicas, resource limits, ingress rules)18- Rolling back a deployment1920## Instructions2122### Step 1: Detect configuration changes23241. **Scan the diff.** Compare the current changes against the deployed state. Identify any new or modified:25 - Environment variables (in code, `.env` files, Helm values, ConfigMaps, or container specs)26 - Secrets references27 - Config map entries28 - Feature flags29 - Service endpoints or URLs30 - Resource limits (CPU, memory)31 - Volume mounts or persistent storage32332. **Cross-reference application code.** If a new `process.env.X`, `$_ENV['X']`, `os.environ['X']`, or equivalent is introduced in application code, verify it has a corresponding entry in the deployment manifests.34353. **Report findings.** List every configuration addition or change detected. For each one, state:36 - Name of the variable/secret/config37 - Where it is consumed (file and line)38 - Where it should be defined (Helm values, ConfigMap, Secret, etc.)39 - Whether a default/fallback exists in code4041### Step 2: Ask the user to confirm values4243For every new or changed configuration value, ask the user explicitly:44451. **"Has `<VARIABLE_NAME>` been set in the target environment?"**46 - If it is a secret: "Has the secret been created/updated in the cluster's secret store?"47 - If it has no default: "This variable has no fallback — the application will fail without it. Please confirm it is set."48492. **"Is the value correct for this environment?"** (e.g., staging URL vs. production URL)50513. **"Does this value differ between environments?"** If yes, confirm each environment has the correct value.5253Do not proceed until the user confirms all configuration values are in place.5455### Step 3: Verify Helm/Kubernetes readiness56571. **Helm values completeness.** Verify all required values in `values.yaml` (or environment-specific overrides) are populated. Flag any that are empty, commented out, or set to placeholder values like `TODO`, `CHANGEME`, `<replace>`.58592. **Image tag.** Confirm the container image tag matches the intended release version. Flag if it points to `latest` in production.60613. **Resource limits.** Verify CPU and memory requests/limits are set. Flag containers without resource limits.62634. **Replicas.** Confirm replica count is appropriate for the target environment. Flag single-replica deployments in production without a justification.64655. **Health checks.** Verify liveness and readiness probes are defined. Flag any container without them.66676. **Ingress/networking.** If routes changed, confirm:68 - DNS records exist or are planned69 - TLS certificates are provisioned70 - Network policies allow required traffic71727. **Persistent storage.** If volumes are added or resized, confirm the storage class exists and capacity is sufficient.7374### Step 4: Verify dependencies and ordering75761. **Database migrations.** If the deployment requires schema changes:77 - "Have migrations been run (or will they run automatically on startup)?"78 - "Are migrations backward-compatible with the currently running version?" (for zero-downtime deployments)79802. **Dependent services.** If the deployment depends on another service being updated first:81 - "Has `<dependency>` already been deployed with the required changes?"82 - "Is the API contract between services compatible?"83843. **Feature flags.** If new functionality is behind a flag:85 - "Is the flag configured in the target environment?"86 - "Should it be enabled or disabled at deploy time?"8788### Step 5: Verify rollback readiness89901. **"Can this deployment be rolled back safely?"** Check for:91 - Irreversible migrations92 - Breaking contract changes with upstream/downstream services93 - One-way data transformations94952. **"Is the previous image/version still available?"** Verify the prior version tag exists in the registry.96973. **"Is there a runbook or known procedure for rollback?"** If not, flag it as a risk.9899### Step 6: Final checklist confirmation100101Present a summary checklist and require explicit user sign-off:102103```markdown104## Deployment Checklist — <service> → <environment>105106### Configuration107- [ ] All new environment variables are set in the target environment108- [ ] All secrets are created/updated in the secret store109- [ ] Values are correct for this specific environment (not copied from another)110111### Kubernetes/Helm112- [ ] Image tag points to the correct release version113- [ ] Resource requests and limits are defined114- [ ] Health checks (liveness + readiness) are configured115- [ ] Replica count is appropriate for the environment116- [ ] Ingress/DNS/TLS are configured (if applicable)117118### Dependencies119- [ ] Database migrations are applied or will auto-run120- [ ] Dependent services are deployed and compatible121- [ ] Feature flags are configured122123### Rollback124- [ ] Deployment can be rolled back without data loss125- [ ] Previous version is available in the registry126127### Sign-off128- [ ] Engineer confirms: ready to deploy129```130131Do not proceed with deployment until every applicable item is checked or explicitly marked as not applicable with a reason.132133### Step 7: Post-deployment verification134135After the deployment is applied:1361371. **Monitor pod status.** Verify all pods reach `Running` state and pass readiness checks.1382. **Check logs.** Look for error-level log entries in the first 2–5 minutes.1393. **Smoke test.** If a health endpoint or basic functionality check exists, run it.1404. **Alert the user** if anything looks abnormal, even if pods are technically running.141142## Principles143144- **Never assume configuration is correct.** Always verify explicitly.145- **Err on the side of blocking.** A delayed deployment is better than a broken one.146- **Make the invisible visible.** Surface every implicit dependency and assumption.147- **One environment at a time.** Never deploy to multiple environments simultaneously without explicit confirmation.