Production Readiness Review
Evaluates and validates that services meet operational criteria before deploying to production. Applies the Google SRE PRR framework across eight categories — reliability, observability, scalability, security, data management, deployment engineering, cost governance, and documentation — ensuring teams ship with confidence rather than hope. This skill guides systematic pre-launch validation so that production deployments are deliberate, traceable, and reversible.
TL;DR Checklist
When to Use
Use this skill when:
- Preparing a new service or major version for its first production deployment
- Conducting a Production Readiness Review (PRR) gate before releasing to users
- Validating that an existing production service still meets operational criteria after significant changes
- Onboarding a team to SRE practices and establishing readiness standards
- Evaluating whether a service should exit hypercare period into full ownership
- Performing quarterly operational audits of critical-path services
When NOT to Use
Avoid this skill for:
- Internal development tools or non-user-facing infrastructure without SLA requirements (use lightweight checklist instead)
- One-off scripts, prototypes, or throwaway code that will never reach production
- Debugging an active production incident — use
incident-response patterns instead
- General architectural design discussions before the readiness stage — focus on ADRs (
architecture-decision-records) first
Core Workflow
The Production Readiness Review follows the Google SRE PRR model, structured as a time-boxed evaluation with a clear decision gate.
Pre-Review Preparation — Service owner completes and distributes a readiness checklist at least 48 hours before the review: SLI/SLO definitions, architecture diagram with data flow, test results (unit, integration, load), security scan results, incident history for related systems, and draft runbooks covering the top 5 failure modes. Checkpoint: All materials must be distributed before scheduling; if any category is missing, request an extension or reduce scope.
Architecture Walkthrough (15 minutes) — Owner presents the system data flow, dependency graph, deployment topology, and failure boundaries. Focus on external dependencies, data persistence layer, and cross-service communication patterns. Checkpoint: Verify the diagram matches current deployed state; flag any undocumented services or APIs in the path.
Reliability Assessment (15 minutes) — Validate SLI/SLO definitions against actual user-facing behavior (not just internal metrics). Confirm error budget policy is defined, tracked, and that budget exhaustion triggers a defined response (e.g., feature freeze, dedicated stability sprint). Review resilience patterns: circuit breakers, retry policies with exponential backoff and jitter, bulkhead isolation for independent subsystems, and graceful degradation paths. Checkpoint: Every external dependency must have at least one resilience pattern applied; no dependency may operate without timeout configuration.
Observability Check (10 minutes) — Demonstrate live dashboards covering the Golden Signals. Verify distributed tracing spans cross service boundaries. Confirm that structured logs contain correlation IDs, are emitted in JSON format, and that PII is filtered at ingestion. Review alert routing: each active alert has an associated runbook page linked from the monitoring tool. Checkpoint: At least 80% of active alerts must have a runbook; no alert fires without a defined triage path.
Security Review (10 minutes) — Present vulnerability scan results (container images and dependency trees). Validate authentication model (mTLS between services, API key management, OAuth2/OIDC for external clients). Verify RBAC matrix is documented and enforced. Confirm encryption at rest (AES-256) and in transit (TLS 1.2+ minimum, TLS 1.3 preferred). Check that OWASP Top 10 mitigations are implemented. Checkpoint: Zero critical or high CVEs unpatched; no secrets stored in environment variables or source code.
Operational Readiness (10 minutes) — Walk through the deployment pipeline: immutable artifacts, canary strategy, automated rollback triggers, and feature flag configuration. Confirm on-call rotation is assigned, coverage has been tested with at least one scheduled drill, and escalation procedures are documented. Verify DORA metrics are tracked for the service. Checkpoint: On-call contact must be confirmed; rollback procedure must be testable without production data exposure.
Decision Gate — Review panel renders a verdict: Approve, Approve with Conditions, or Not Approved. If conditions are attached, set a remediation deadline (typically 14 days). Schedule a follow-up review for conditional approvals before they expire. Checkpoint: Document the decision, all findings, and action items in a shared record; notify stakeholders within one business day.
Reference Guide — Production Readiness Categories
Category 1: Reliability & Availability
A production service must demonstrate predictable behavior under normal load and graceful degradation under stress.
Criteria:
- Define at least 3 Service Level Indicators (SLIs) that map directly to user experience — e.g., HTTP success rate, p99 latency for the primary API endpoint, database query timeout rate.
- Set SLO targets aligned with business impact: Tier-1 services require ≥ 99.95% availability; Tier-2 requires ≥ 99.9%.
- Implement an error budget policy: calculate remaining budget monthly, define consumption thresholds (warning at 50%, critical at 25%), and establish response procedures when exhausted.
- Apply circuit breakers to all external dependencies with configured failure thresholds, reset timeouts, and fallback behaviors.
- Configure retry policies using exponential backoff with jitter to prevent thundering herd problems on transient failures.
- Implement bulkhead isolation: independent connection pools and thread pools per downstream dependency so one failing service cannot cascade.
- Define graceful degradation paths for each major feature — what functionality remains when a secondary dependency is unavailable.
- Execute chaos engineering tests targeting the top 3 failure modes in the last quarter; document results and remediation actions.
Common pitfall: Defining SLIs on infrastructure metrics (CPU, memory) instead of user-facing signals (request success, latency). Infrastructure health does not equal user satisfaction.
Code Example: SLO/SLI Definition Pattern
from dataclasses import dataclass, field
from datetime import datetime, timedelta
@dataclass
class ServiceLevelObjective:
"""Defines a Service Level Objective for production readiness.
SLIs measure user-facing signals; SLOs set the target bar.
Error budget drives release velocity decisions.
"""
name: str
indicator: str # e.g., "http_requests_total{status!~'5..'}"
target: float # e.g., 0.9995 for 99.95% availability
window: timedelta = field(default=timedelta(days=30))
def error_budget(self) -> float:
return 1.0 - self.target
def errors_allowed_in_window(self, total_requests: int) -> int:
"""Maximum number of errors allowed in the evaluation window."""
max_errors = total_requests * (1.0 - self.target)
return int(max_errors)
# Example: API availability SLO for a Tier-1 service
api_slo = ServiceLevelObjective(
name="API Availability",
indicator="http_request_success_rate",
target=0.9995, # 99.95% — ~4.3 minutes of downtime per month
)
# Example: Latency SLO for a Tier-2 service
latency_slo = ServiceLevelObjective(
name="Checkout Latency",
indicator="http_request_duration_seconds{quantile='0.99', handler='/checkout'}",
target=0.99, # 99% of requests under p99 latency target
)
Category 2: Observability
Google's Three Pillars model provides the foundation: Metrics, Logging, and Tracing must all be operational before launch.
Metrics — Golden Signals:
- Rate: requests per second with status code histograms (2xx, 4xx, 5xx breakdown)
- Latency: p50, p95, p99 percentiles computed over rolling 5-minute windows
- Error rate: percentage of requests failing at the service boundary vs. downstream
- Saturation: connection pool utilization, thread pool usage, memory pressure relative to limits
Logging:
- All log output must be structured JSON with mandatory fields:
timestamp, level, service, trace_id, span_id, message
- Enforce log levels application-wide:
DEBUG for development only (never in production), INFO for operational events, WARN for recoverable anomalies, ERROR for failures requiring attention
- Implement PII filtering at the logging layer — redact fields matching known patterns (email, SSN, credit card numbers) before data reaches log storage
- Configure log retention policies aligned with compliance requirements (typically 90 days hot, 1 year warm archive)
Tracing:
- Deploy OpenTelemetry SDK in all services with automatic span generation for HTTP/gRPC/database calls
- Propagate trace context using W3C Trace Context headers across all service boundaries (no custom header formats)
- Configure sampling strategy: head-based sampling for high-volume services (e.g., 10% default), tail-based sampling for error traces (always sample 5xx responses and spans exceeding latency thresholds)
- Verify that trace dashboards show end-to-end request flows across all deployed microservices
Category 3: Scalability & Performance
Production services must handle expected peak load with defined performance margins.
Criteria:
- Conduct load profiling: establish baseline, performance (2x expected traffic), and stress (5x expected traffic) benchmarks. Document p99 latency, throughput, and resource utilization at each level.
- Validate auto-scaling policies through actual testing: configure scale-up thresholds (e.g., CPU > 70% for 3 consecutive minutes) and verify scale-down doesn't cause request loss during cooldown periods.
- Size connection pools explicitly per downstream service — use the formula:
pool_size = (core_count * 2) + effective_spindle_count for database connections, with maximum limits based on RDS/managed instance capacity.
- Implement rate limiting at the API boundary using a token bucket or sliding window algorithm; return proper HTTP 429 responses with retry-after headers.
- Design cache invalidation strategy with TTL bounds, stale-while-revalidate patterns, and cache stampede protection (lock-based refresh for high-traffic keys).
- Define performance budgets: p99 latency ≤ 300ms for API endpoints, database query time ≤ 50ms for primary reads. Flag any regression above budget as a P1 defect.
Common pitfall: Configuring auto-scaling thresholds without testing cooldown behavior. Services often scale up correctly but suffer request spikes during scale-down transitions that weren't anticipated.
Code Example: Exponential Backoff with Jitter (Production-Ready Retry)
import random
import time
from typing import Callable, Type, TypeVar
T = TypeVar("T")
def retry_with_backoff(
func: Callable[..., T],
max_retries: int = 3,
base_delay: float = 1.0,
max_delay: float = 60.0,
jitter: bool = True,
retryable_exceptions: tuple[Type[Exception], ...] = (ConnectionError, TimeoutError),
) -> T:
"""Retry with exponential backoff and random jitter to prevent thundering herd.
Without jitter, multiple concurrent retries will synchronize and amplify
the load on the recovering service — known as the "thundering herd" problem.
Adding random variance desynchronizes retry attempts.
Args:
func: The callable to retry
max_retries: Maximum number of retry attempts (default 3)
base_delay: Initial delay in seconds (default 1.0)
max_delay: Cap on delay to prevent excessive waits (default 60s)
jitter: Whether to add random variance to delays
retryable_exceptions: Tuple of exception types eligible for retry
Returns:
The result of the successful function call
Raises:
The last exception if all retries are exhausted
"""
last_error = None
for attempt in range(max_retries):
try:
return func()
except retryable_exceptions as e:
last_error = e
delay = min(base_delay * (2 ** attempt), max_delay)
if jitter:
delay *= random.uniform(0.5, 1.5)
time.sleep(delay)
raise last_error
Category 4: Security & Compliance
Security gates are non-negotiable prerequisites for production deployment.
Criteria:
- Enforce zero-trust network policies: no service-to-service communication is allowed by default; all traffic must be explicitly permitted via namespace-level or mesh-level policies.
- Implement mTLS between all services within the cluster; external API clients authenticate via OAuth2/OIDC with short-lived tokens (access token TTL ≤ 15 minutes).
- Document the RBAC model: enumerate all roles, their permissions matrix, and approval workflow for role changes. Apply principle of least privilege — no service account should have admin-level access.
- Encrypt data at rest using AES-256 encryption with keys managed through a dedicated KMS; rotate keys annually at minimum.
- Enforce TLS 1.2 as absolute minimum across all endpoints; prefer TLS 1.3 for new integrations. Disable deprecated cipher suites (RC4, DES, 3DES, CBC-mode ciphers).
- Run container image scanning in the CI/CD pipeline using Trivy or Grype; block deployment on critical/high severity findings.
- Scan dependencies with Snyk, Dependabot, or equivalent; track known CVEs with SLA-based remediation (critical: 24 hours, high: 7 days).
- Implement OWASP Top 10 mitigations: input validation on all entry points, parameterized queries for database access, CSRF tokens for state-changing operations, Content-Security-Policy headers.
Category 5: Data Management & Persistence
Data integrity and availability are critical for production systems handling user data or transactional records.
Criteria:
- Verify database backups with actual restore drills — not just confirming backup jobs run, but that restored data matches source within acceptable tolerances (typically < 1 minute of lag for point-in-time recovery).
- Ensure migration scripts are idempotent and backward-compatible: running a script against an already-migrated database must succeed without side effects. Use versioned migrations with explicit forward and rollback paths.
- Configure read replicas for write-heavy services; verify that read traffic is correctly routed and replication lag stays below 100ms under normal load.
- Define data retention policies aligned with legal requirements: specify retention period, archive method, and secure destruction process per data class (PII, financial, operational).
- Implement dead letter queues for async processing pipelines; configure alerting when DLQ depth exceeds threshold (e.g., > 100 messages) to prevent silent data loss.
Category 6: Deployment & Release Engineering
Production deployments must be repeatable, reversible, and observable.
Criteria:
- Use immutable artifacts: Docker images tagged with semver + git SHA; no "latest" tags in production. Sign images using Cosign or Notary for supply chain verification.
- Implement canary deployments: route 5% of traffic to new version for 15 minutes, evaluate error rate and latency metrics against baseline, then progressively increase to 25%, 50%, and 100%.
- Define automated rollback criteria: if error rate increases > 1% or p99 latency increases > 20% during canary phase, trigger automatic rollback within 60 seconds.
- Use feature flags for all non-trivial changes; ensure every flag has an owner, expiry date, and cleanup procedure. No permanent feature flags — they become technical debt.
- Track DORA metrics per service: deployment frequency, lead time for changes, change failure rate, and mean time to recovery (MTTR). Establish baselines at first production release.
Category 7: Cost & Resource Management
Production services must demonstrate cost awareness and resource efficiency.
Criteria:
- Implement cost attribution: tag all resources with service name, team, and environment so costs appear in billing dashboards per service.
- Configure budget alerts at 50%, 80%, and 100% of monthly spend per service; alert the on-call engineer and team lead.
- Run idle resource detection weekly: flag services running > 90% underutilized for 7 consecutive days, or compute instances with zero traffic in 48 hours.
- Review reserved instance commitments quarterly — match reservation terms to actual predictable baseline load rather than peak capacity.
Category 8: Documentation & Runbooks
Operations knowledge must survive team transitions and incident pressure.
Criteria:
- Maintain an architecture diagram showing all service boundaries, data flows, dependency relationships, and external integrations. Update within 48 hours of any architectural change.
- Publish a service catalog entry containing: service name, purpose, owner, team contact, SLI/SLO targets, deployment target (cluster/namespace), and health check endpoint.
- Provide an onboarding guide new engineers need to contribute meaningfully: repository layout, local development setup, testing commands, deployment process for staging, key dependencies to understand.
- Write runbooks for each active alert covering the top 5 failure modes. Each runbook must include: trigger condition (what alert fired), impact assessment (who is affected), diagnosis steps (commands or queries to investigate), remediation actions (how to fix), and escalation path if initial fix fails.
Runbook template:
## Runbook: [Alert Name]
**Trigger:** Alert fires when [metric] exceeds [threshold] for [duration].
**Impact:** [Describe user-facing impact — e.g., "Users see 502 errors on checkout"]
**Diagnosis:**
1. Check [service] error logs: `kubectl logs -l app=[service] --tail=200 | grep ERROR`
2. Verify downstream dependency health: curl http://[dependency]/health
3. Review recent deployments: `git log --oneline HEAD~5..HEAD`
**Remediation:**
1. [Step-by-step fix procedure]
2. [Verification command]
**Escalation:** If unresolved after 15 minutes, page on-call secondary and notify service owner.
Dev-to-Production Gap Analysis
The most common failures occur when development practices don't translate to production realities. Use this analysis to identify gaps before they cause incidents.
Environment Parity Gaps
| Gap |
Development Behavior |
Production Reality |
Mitigation |
| Data volume |
Small seed dataset (100 rows) |
Millions of records, query performance degrades |
Load test with production-scale data subset; benchmark query plans |
| Network topology |
Single node, localhost connections |
Multi-AZ, service mesh, mTLS termination |
Test failover across availability zones; validate TLS handshakes |
| Configuration |
Hardcoded values or simple env vars |
Secrets management, dynamic config, feature flags |
Use parameterized configs with validation at startup |
| Resource limits |
No constraints on local machine |
CPU/memory quotas, OOM kills, throttling |
Set resource requests/limits matching production; test under constrained resources |
| External dependencies |
Mocked or stubbed responses |
Rate-limited APIs, partial outages, version drift |
Integrate with staging environments that mirror real dependency behavior |
| Traffic patterns |
Uniform request rate during testing |
Bursty traffic, daily/weekly cycles, seasonal spikes |
Simulate burst patterns; implement backpressure and queue depth limits |
Process Gaps
| Gap |
Risk |
Mitigation |
| No canary analysis |
Full blast releases cause undetected regressions |
Enforce 5% → 25% → 50% → 100% progression with metric gates |
| Undocumented runbooks |
Extended MTTR during incidents; knowledge siloed |
Mandatory runbook review as part of alert creation process |
| Alert fatigue |
Critical alerts ignored among noise |
Weekly alert triage; remove or suppress non-actionable alerts |
| No postmortem process |
Repeat failures from same root causes |
Blameless postmortems within 48 hours; track action items to completion |
Technical Gaps
| Gap |
Risk |
Mitigation |
| Missing distributed tracing |
Cannot diagnose cross-service failures |
Deploy OpenTelemetry auto-instrumentation before production release |
| Connection pool mismanagement |
Connection exhaustion under load |
Benchmark pool sizing; implement idle connection eviction |
| Retry storms |
Cascading failures when multiple services retry simultaneously |
Enforce jitter in all retry logic; implement circuit breakers as secondary defense |
| Cache warmup differences |
Cold cache causes latency spikes on restart |
Implement cache warming strategy for critical data paths |
| Time-dependent bugs |
Issues only manifest at day/month boundaries, leap years |
Test boundary conditions explicitly; include timezone-aware tests |
Security Gaps
| Gap |
Risk |
Mitigation |
| Network isolation missing |
Lateral movement if a service is compromised |
Enforce network policies at namespace level; validate with penetration testing |
| Credential management |
Secrets in env vars or code repositories |
Adopt secret rotation via Vault or equivalent; audit all credential locations |
| TLS termination gaps |
Insecure communication between mesh nodes |
Mandate mTLS in the service mesh configuration |
| Audit logging absent |
Cannot detect or investigate security incidents |
Enable audit trails for all authentication, authorization, and data access events |
Code Example: Production Readiness Scorecard (YAML)
Use this YAML template to formalize review findings and track remediation conditions.
service: "payment-processing-api"
review_date: "2026-05-21"
owner: "payments-team@example.com"
tier: 1
categories:
reliability:
status: PASS
findings:
- SLI defined: p99 latency < 300ms, availability > 99.95%
- Error budget tracked: 0.42% remaining of 0.5% monthly budget
- Circuit breakers for all 7 external dependencies configured
risks:
- External fraud detection API has no fallback — mitigation in progress
observability:
status: PASS_WITH_CONDITIONS
findings:
- Golden Signals dashboards live and accessible via Grafana
- Distributed tracing enabled via OpenTelemetry across all services
- Runbooks linked for 8 of 12 active alerts
risks:
- 4 runbooks missing — owner to complete within 7 days
security:
status: PASS
findings:
- Zero critical/high CVEs in container images or dependencies
- mTLS enforced between all services via service mesh
- TLS 1.3 configured for external-facing endpoints
deployment:
status: PASS
findings:
- Canary deployment pipeline automated with rollback criteria
- Immutable artifacts: Docker images tagged with semver + git SHA
- Feature flags implemented for 3 active canary features
decision: NOT_APPROVED
conditions:
- Complete runbooks for top 4 alerts within 7 days (by 2026-05-28)
- Deliver fraud detection API fallback implementation within 14 days
Decision Gate Criteria
The review panel renders one of three decisions. Each has specific criteria:
Approved ✅
All eight readiness categories pass with zero findings. SLI/SLO targets are validated against real traffic patterns. Error budget tracking is operational. Runbooks for all active alerts are tested. Security scan shows zero critical/high CVEs. On-call coverage is confirmed and tested.
Approved with Conditions ⚠️
Minor gaps exist that can be remediated within 14 days without blocking the deployment. Typical conditions: missing runbooks for low-priority alerts, documentation updates pending, or a single non-critical CVE awaiting patch. The service may deploy immediately but must submit evidence of condition resolution before the deadline. A follow-up review is automatically scheduled.
Not Approved ❌
Critical gaps prevent safe production deployment. Blocking conditions include: no SLIs defined (no way to measure success), no on-call coverage assigned, unpatched critical CVEs, missing runbooks for core failure modes, or failed security audit findings that cannot be mitigated. The service must address all blockers and re-enter the PRR process before any production deployment attempt.
Constraints
MUST DO
- Always define SLIs before SLOs — indicators measure user experience; targets set the bar
- Calculate error budget remaining at least weekly and publish to team channels
- Implement exponential backoff with jitter on every retry path — never use fixed-delay retries
- Run a restore drill for database backups at least quarterly, not just confirm backup jobs exist
- Enforce zero-trust network policies from day one; adding isolation after breach is far harder
- Require runbooks for every alert that pages an on-call engineer
- Use immutable artifacts with semver + git SHA tags; never deploy "latest" to production
- Document the RBAC matrix explicitly and enforce least privilege per service account
- Track DORA metrics from the first production deployment to establish baselines
- Include at least one chaos engineering test targeting your highest-risk failure mode
MUST NOT DO
- Define SLO targets based on infrastructure health alone (CPU, memory) without mapping to user-facing signals
- Disable circuit breakers or reduce retry limits "to fix performance" — these are safety mechanisms
- Store secrets in environment variables or source code; use a dedicated secrets manager
- Deploy without an automated rollback path; manual rollbacks during incidents increase MTTR
- Leave alerts running that have no associated runbook or on-call owner
- Skip canary analysis even for small changes; any unmeasured deployment is a gamble
- Allow feature flags to become permanent — every flag must have an expiry and cleanup plan
- Use the same monitoring dashboard for development and production traffic patterns
Output Template
When applying this skill during a Production Readiness Review, produce:
- Service Summary — Service name, version, owner, deployment target, and classification (Tier-1 / Tier-2 / Tier-3)
- Category-by-Category Assessment — For each of the 8 categories, report status (PASS, PASS_WITH_CONDITIONS, FAIL), list findings with specific metric values or evidence, note any risks with severity ratings
- Dev-to-Production Gap Analysis — Document any gaps identified between development and production environments for this service, categorized by type (environment, process, technical, security)
- Decision — Clear verdict (Approved / Approved with Conditions / Not Approved) with numbered conditions if applicable
- Remediation Plan — For conditional approvals: specific action items, owners, deadlines (max 14 days), and evidence required to close each condition
- Follow-up Schedule — Date for conditional review completion, next quarterly audit date
Related Skills
| Skill |
Purpose |
observability-patterns |
Deep-dive into the Three Pillars: metrics instrumentation, structured logging patterns, distributed tracing setup |
technical-debt-management |
Track and prioritize remediation of conditions identified during PRR that cannot be addressed immediately |
architecture-decision-records |
Document architectural choices that influence production readiness (e.g., technology selection, deployment model) |
Live References
Authoritative documentation for Production Readiness Review practices and SRE standards.
1---2name: production-readiness3description: Evaluates service readiness against Google SRE PRR framework covering reliability, observability, scalability, security, data management, deployment engineering, cost governance, and documentation for safe production deployment.4license: MIT5---678910# Production Readiness Review1112Evaluates and validates that services meet operational criteria before deploying to production. Applies the Google SRE PRR framework across eight categories — reliability, observability, scalability, security, data management, deployment engineering, cost governance, and documentation — ensuring teams ship with confidence rather than hope. This skill guides systematic pre-launch validation so that production deployments are deliberate, traceable, and reversible.1314## TL;DR Checklist1516- [ ] Service has at least 3 defined SLIs with corresponding SLO targets and an error budget policy17- [ ] Golden Signals dashboards (rate, latency p95/p99, error rate, saturation) are live and accessible18- [ ] Distributed tracing via OpenTelemetry is enabled with context propagation across all service boundaries19- [ ] Structured JSON logging with enforced levels and PII filtering is in place20- [ ] Circuit breakers and retry-with-jitter are implemented for all 7+ external dependencies21- [ ] Canary deployment path exists with automated rollback criteria defined22- [ ] Runbooks cover the top 5 failure modes with trigger conditions, diagnosis steps, and remediation23- [ ] Security scan shows zero critical CVEs; TLS 1.2+ enforced end-to-end; RBAC model documented24- [ ] Auto-scaling policies tested under load; connection pools sized for peak traffic25- [ ] Database backups verified with successful restore drill in the last 30 days2627---2829## When to Use3031Use this skill when:3233- Preparing a new service or major version for its first production deployment34- Conducting a Production Readiness Review (PRR) gate before releasing to users35- Validating that an existing production service still meets operational criteria after significant changes36- Onboarding a team to SRE practices and establishing readiness standards37- Evaluating whether a service should exit hypercare period into full ownership38- Performing quarterly operational audits of critical-path services3940---4142## When NOT to Use4344Avoid this skill for:4546- Internal development tools or non-user-facing infrastructure without SLA requirements (use lightweight checklist instead)47- One-off scripts, prototypes, or throwaway code that will never reach production48- Debugging an active production incident — use `incident-response` patterns instead49- General architectural design discussions before the readiness stage — focus on ADRs (`architecture-decision-records`) first5051---5253## Core Workflow5455The Production Readiness Review follows the Google SRE PRR model, structured as a time-boxed evaluation with a clear decision gate.56571. **Pre-Review Preparation** — Service owner completes and distributes a readiness checklist at least 48 hours before the review: SLI/SLO definitions, architecture diagram with data flow, test results (unit, integration, load), security scan results, incident history for related systems, and draft runbooks covering the top 5 failure modes. **Checkpoint:** All materials must be distributed before scheduling; if any category is missing, request an extension or reduce scope.58592. **Architecture Walkthrough** (15 minutes) — Owner presents the system data flow, dependency graph, deployment topology, and failure boundaries. Focus on external dependencies, data persistence layer, and cross-service communication patterns. **Checkpoint:** Verify the diagram matches current deployed state; flag any undocumented services or APIs in the path.60613. **Reliability Assessment** (15 minutes) — Validate SLI/SLO definitions against actual user-facing behavior (not just internal metrics). Confirm error budget policy is defined, tracked, and that budget exhaustion triggers a defined response (e.g., feature freeze, dedicated stability sprint). Review resilience patterns: circuit breakers, retry policies with exponential backoff and jitter, bulkhead isolation for independent subsystems, and graceful degradation paths. **Checkpoint:** Every external dependency must have at least one resilience pattern applied; no dependency may operate without timeout configuration.62634. **Observability Check** (10 minutes) — Demonstrate live dashboards covering the Golden Signals. Verify distributed tracing spans cross service boundaries. Confirm that structured logs contain correlation IDs, are emitted in JSON format, and that PII is filtered at ingestion. Review alert routing: each active alert has an associated runbook page linked from the monitoring tool. **Checkpoint:** At least 80% of active alerts must have a runbook; no alert fires without a defined triage path.64655. **Security Review** (10 minutes) — Present vulnerability scan results (container images and dependency trees). Validate authentication model (mTLS between services, API key management, OAuth2/OIDC for external clients). Verify RBAC matrix is documented and enforced. Confirm encryption at rest (AES-256) and in transit (TLS 1.2+ minimum, TLS 1.3 preferred). Check that OWASP Top 10 mitigations are implemented. **Checkpoint:** Zero critical or high CVEs unpatched; no secrets stored in environment variables or source code.66676. **Operational Readiness** (10 minutes) — Walk through the deployment pipeline: immutable artifacts, canary strategy, automated rollback triggers, and feature flag configuration. Confirm on-call rotation is assigned, coverage has been tested with at least one scheduled drill, and escalation procedures are documented. Verify DORA metrics are tracked for the service. **Checkpoint:** On-call contact must be confirmed; rollback procedure must be testable without production data exposure.68697. **Decision Gate** — Review panel renders a verdict: Approve, Approve with Conditions, or Not Approved. If conditions are attached, set a remediation deadline (typically 14 days). Schedule a follow-up review for conditional approvals before they expire. **Checkpoint:** Document the decision, all findings, and action items in a shared record; notify stakeholders within one business day.7071---7273## Reference Guide — Production Readiness Categories7475### Category 1: Reliability & Availability7677A production service must demonstrate predictable behavior under normal load and graceful degradation under stress.7879**Criteria:**80- Define at least 3 Service Level Indicators (SLIs) that map directly to user experience — e.g., HTTP success rate, p99 latency for the primary API endpoint, database query timeout rate.81- Set SLO targets aligned with business impact: Tier-1 services require ≥ 99.95% availability; Tier-2 requires ≥ 99.9%.82- Implement an error budget policy: calculate remaining budget monthly, define consumption thresholds (warning at 50%, critical at 25%), and establish response procedures when exhausted.83- Apply circuit breakers to all external dependencies with configured failure thresholds, reset timeouts, and fallback behaviors.84- Configure retry policies using exponential backoff with jitter to prevent thundering herd problems on transient failures.85- Implement bulkhead isolation: independent connection pools and thread pools per downstream dependency so one failing service cannot cascade.86- Define graceful degradation paths for each major feature — what functionality remains when a secondary dependency is unavailable.87- Execute chaos engineering tests targeting the top 3 failure modes in the last quarter; document results and remediation actions.8889**Common pitfall:** Defining SLIs on infrastructure metrics (CPU, memory) instead of user-facing signals (request success, latency). Infrastructure health does not equal user satisfaction.9091### Code Example: SLO/SLI Definition Pattern9293```python94from dataclasses import dataclass, field95from datetime import datetime, timedelta9697@dataclass98class ServiceLevelObjective:99 """Defines a Service Level Objective for production readiness.100 101 SLIs measure user-facing signals; SLOs set the target bar.102 Error budget drives release velocity decisions.103 """104 name: str105 indicator: str # e.g., "http_requests_total{status!~'5..'}"106 target: float # e.g., 0.9995 for 99.95% availability107 window: timedelta = field(default=timedelta(days=30))108 109 def error_budget(self) -> float:110 return 1.0 - self.target111 112 def errors_allowed_in_window(self, total_requests: int) -> int:113 """Maximum number of errors allowed in the evaluation window."""114 max_errors = total_requests * (1.0 - self.target)115 return int(max_errors)116117# Example: API availability SLO for a Tier-1 service118api_slo = ServiceLevelObjective(119 name="API Availability",120 indicator="http_request_success_rate",121 target=0.9995, # 99.95% — ~4.3 minutes of downtime per month122)123124# Example: Latency SLO for a Tier-2 service125latency_slo = ServiceLevelObjective(126 name="Checkout Latency",127 indicator="http_request_duration_seconds{quantile='0.99', handler='/checkout'}",128 target=0.99, # 99% of requests under p99 latency target129)130```131132### Category 2: Observability133134Google's Three Pillars model provides the foundation: Metrics, Logging, and Tracing must all be operational before launch.135136**Metrics — Golden Signals:**137- Rate: requests per second with status code histograms (2xx, 4xx, 5xx breakdown)138- Latency: p50, p95, p99 percentiles computed over rolling 5-minute windows139- Error rate: percentage of requests failing at the service boundary vs. downstream140- Saturation: connection pool utilization, thread pool usage, memory pressure relative to limits141142**Logging:**143- All log output must be structured JSON with mandatory fields: `timestamp`, `level`, `service`, `trace_id`, `span_id`, `message`144- Enforce log levels application-wide: `DEBUG` for development only (never in production), `INFO` for operational events, `WARN` for recoverable anomalies, `ERROR` for failures requiring attention145- Implement PII filtering at the logging layer — redact fields matching known patterns (email, SSN, credit card numbers) before data reaches log storage146- Configure log retention policies aligned with compliance requirements (typically 90 days hot, 1 year warm archive)147148**Tracing:**149- Deploy OpenTelemetry SDK in all services with automatic span generation for HTTP/gRPC/database calls150- Propagate trace context using W3C Trace Context headers across all service boundaries (no custom header formats)151- Configure sampling strategy: head-based sampling for high-volume services (e.g., 10% default), tail-based sampling for error traces (always sample 5xx responses and spans exceeding latency thresholds)152- Verify that trace dashboards show end-to-end request flows across all deployed microservices153154### Category 3: Scalability & Performance155156Production services must handle expected peak load with defined performance margins.157158**Criteria:**159- Conduct load profiling: establish baseline, performance (2x expected traffic), and stress (5x expected traffic) benchmarks. Document p99 latency, throughput, and resource utilization at each level.160- Validate auto-scaling policies through actual testing: configure scale-up thresholds (e.g., CPU > 70% for 3 consecutive minutes) and verify scale-down doesn't cause request loss during cooldown periods.161- Size connection pools explicitly per downstream service — use the formula: `pool_size = (core_count * 2) + effective_spindle_count` for database connections, with maximum limits based on RDS/managed instance capacity.162- Implement rate limiting at the API boundary using a token bucket or sliding window algorithm; return proper HTTP 429 responses with retry-after headers.163- Design cache invalidation strategy with TTL bounds, stale-while-revalidate patterns, and cache stampede protection (lock-based refresh for high-traffic keys).164- Define performance budgets: p99 latency ≤ 300ms for API endpoints, database query time ≤ 50ms for primary reads. Flag any regression above budget as a P1 defect.165166**Common pitfall:** Configuring auto-scaling thresholds without testing cooldown behavior. Services often scale up correctly but suffer request spikes during scale-down transitions that weren't anticipated.167168### Code Example: Exponential Backoff with Jitter (Production-Ready Retry)169170```python171import random172import time173from typing import Callable, Type, TypeVar174175T = TypeVar("T")176177def retry_with_backoff(178 func: Callable[..., T],179 max_retries: int = 3,180 base_delay: float = 1.0,181 max_delay: float = 60.0,182 jitter: bool = True,183 retryable_exceptions: tuple[Type[Exception], ...] = (ConnectionError, TimeoutError),184) -> T:185 """Retry with exponential backoff and random jitter to prevent thundering herd.186187 Without jitter, multiple concurrent retries will synchronize and amplify188 the load on the recovering service — known as the "thundering herd" problem.189 Adding random variance desynchronizes retry attempts.190191 Args:192 func: The callable to retry193 max_retries: Maximum number of retry attempts (default 3)194 base_delay: Initial delay in seconds (default 1.0)195 max_delay: Cap on delay to prevent excessive waits (default 60s)196 jitter: Whether to add random variance to delays197 retryable_exceptions: Tuple of exception types eligible for retry198199 Returns:200 The result of the successful function call201202 Raises:203 The last exception if all retries are exhausted204 """205 last_error = None206 for attempt in range(max_retries):207 try:208 return func()209 except retryable_exceptions as e:210 last_error = e211 delay = min(base_delay * (2 ** attempt), max_delay)212 if jitter:213 delay *= random.uniform(0.5, 1.5)214 time.sleep(delay)215 raise last_error216```217218### Category 4: Security & Compliance219220Security gates are non-negotiable prerequisites for production deployment.221222**Criteria:**223- Enforce zero-trust network policies: no service-to-service communication is allowed by default; all traffic must be explicitly permitted via namespace-level or mesh-level policies.224- Implement mTLS between all services within the cluster; external API clients authenticate via OAuth2/OIDC with short-lived tokens (access token TTL ≤ 15 minutes).225- Document the RBAC model: enumerate all roles, their permissions matrix, and approval workflow for role changes. Apply principle of least privilege — no service account should have admin-level access.226- Encrypt data at rest using AES-256 encryption with keys managed through a dedicated KMS; rotate keys annually at minimum.227- Enforce TLS 1.2 as absolute minimum across all endpoints; prefer TLS 1.3 for new integrations. Disable deprecated cipher suites (RC4, DES, 3DES, CBC-mode ciphers).228- Run container image scanning in the CI/CD pipeline using Trivy or Grype; block deployment on critical/high severity findings.229- Scan dependencies with Snyk, Dependabot, or equivalent; track known CVEs with SLA-based remediation (critical: 24 hours, high: 7 days).230- Implement OWASP Top 10 mitigations: input validation on all entry points, parameterized queries for database access, CSRF tokens for state-changing operations, Content-Security-Policy headers.231232### Category 5: Data Management & Persistence233234Data integrity and availability are critical for production systems handling user data or transactional records.235236**Criteria:**237- Verify database backups with actual restore drills — not just confirming backup jobs run, but that restored data matches source within acceptable tolerances (typically < 1 minute of lag for point-in-time recovery).238- Ensure migration scripts are idempotent and backward-compatible: running a script against an already-migrated database must succeed without side effects. Use versioned migrations with explicit forward and rollback paths.239- Configure read replicas for write-heavy services; verify that read traffic is correctly routed and replication lag stays below 100ms under normal load.240- Define data retention policies aligned with legal requirements: specify retention period, archive method, and secure destruction process per data class (PII, financial, operational).241- Implement dead letter queues for async processing pipelines; configure alerting when DLQ depth exceeds threshold (e.g., > 100 messages) to prevent silent data loss.242243### Category 6: Deployment & Release Engineering244245Production deployments must be repeatable, reversible, and observable.246247**Criteria:**248- Use immutable artifacts: Docker images tagged with semver + git SHA; no "latest" tags in production. Sign images using Cosign or Notary for supply chain verification.249- Implement canary deployments: route 5% of traffic to new version for 15 minutes, evaluate error rate and latency metrics against baseline, then progressively increase to 25%, 50%, and 100%.250- Define automated rollback criteria: if error rate increases > 1% or p99 latency increases > 20% during canary phase, trigger automatic rollback within 60 seconds.251- Use feature flags for all non-trivial changes; ensure every flag has an owner, expiry date, and cleanup procedure. No permanent feature flags — they become technical debt.252- Track DORA metrics per service: deployment frequency, lead time for changes, change failure rate, and mean time to recovery (MTTR). Establish baselines at first production release.253254### Category 7: Cost & Resource Management255256Production services must demonstrate cost awareness and resource efficiency.257258**Criteria:**259- Implement cost attribution: tag all resources with service name, team, and environment so costs appear in billing dashboards per service.260- Configure budget alerts at 50%, 80%, and 100% of monthly spend per service; alert the on-call engineer and team lead.261- Run idle resource detection weekly: flag services running > 90% underutilized for 7 consecutive days, or compute instances with zero traffic in 48 hours.262- Review reserved instance commitments quarterly — match reservation terms to actual predictable baseline load rather than peak capacity.263264### Category 8: Documentation & Runbooks265266Operations knowledge must survive team transitions and incident pressure.267268**Criteria:**269- Maintain an architecture diagram showing all service boundaries, data flows, dependency relationships, and external integrations. Update within 48 hours of any architectural change.270- Publish a service catalog entry containing: service name, purpose, owner, team contact, SLI/SLO targets, deployment target (cluster/namespace), and health check endpoint.271- Provide an onboarding guide new engineers need to contribute meaningfully: repository layout, local development setup, testing commands, deployment process for staging, key dependencies to understand.272- Write runbooks for each active alert covering the top 5 failure modes. Each runbook must include: trigger condition (what alert fired), impact assessment (who is affected), diagnosis steps (commands or queries to investigate), remediation actions (how to fix), and escalation path if initial fix fails.273274**Runbook template:**275```markdown276## Runbook: [Alert Name]277278**Trigger:** Alert fires when [metric] exceeds [threshold] for [duration].279**Impact:** [Describe user-facing impact — e.g., "Users see 502 errors on checkout"]280**Diagnosis:**2811. Check [service] error logs: `kubectl logs -l app=[service] --tail=200 | grep ERROR`2822. Verify downstream dependency health: curl http://[dependency]/health2833. Review recent deployments: `git log --oneline HEAD~5..HEAD`284**Remediation:**2851. [Step-by-step fix procedure]2862. [Verification command]287**Escalation:** If unresolved after 15 minutes, page on-call secondary and notify service owner.288```289290---291292## Dev-to-Production Gap Analysis293294The most common failures occur when development practices don't translate to production realities. Use this analysis to identify gaps before they cause incidents.295296### Environment Parity Gaps297298| Gap | Development Behavior | Production Reality | Mitigation |299|-----|---------------------|-------------------|------------|300| Data volume | Small seed dataset (100 rows) | Millions of records, query performance degrades | Load test with production-scale data subset; benchmark query plans |301| Network topology | Single node, localhost connections | Multi-AZ, service mesh, mTLS termination | Test failover across availability zones; validate TLS handshakes |302| Configuration | Hardcoded values or simple env vars | Secrets management, dynamic config, feature flags | Use parameterized configs with validation at startup |303| Resource limits | No constraints on local machine | CPU/memory quotas, OOM kills, throttling | Set resource requests/limits matching production; test under constrained resources |304| External dependencies | Mocked or stubbed responses | Rate-limited APIs, partial outages, version drift | Integrate with staging environments that mirror real dependency behavior |305| Traffic patterns | Uniform request rate during testing | Bursty traffic, daily/weekly cycles, seasonal spikes | Simulate burst patterns; implement backpressure and queue depth limits |306307### Process Gaps308309| Gap | Risk | Mitigation |310|-----|------|------------|311| No canary analysis | Full blast releases cause undetected regressions | Enforce 5% → 25% → 50% → 100% progression with metric gates |312| Undocumented runbooks | Extended MTTR during incidents; knowledge siloed | Mandatory runbook review as part of alert creation process |313| Alert fatigue | Critical alerts ignored among noise | Weekly alert triage; remove or suppress non-actionable alerts |314| No postmortem process | Repeat failures from same root causes | Blameless postmortems within 48 hours; track action items to completion |315316### Technical Gaps317318| Gap | Risk | Mitigation |319|-----|------|------------|320| Missing distributed tracing | Cannot diagnose cross-service failures | Deploy OpenTelemetry auto-instrumentation before production release |321| Connection pool mismanagement | Connection exhaustion under load | Benchmark pool sizing; implement idle connection eviction |322| Retry storms | Cascading failures when multiple services retry simultaneously | Enforce jitter in all retry logic; implement circuit breakers as secondary defense |323| Cache warmup differences | Cold cache causes latency spikes on restart | Implement cache warming strategy for critical data paths |324| Time-dependent bugs | Issues only manifest at day/month boundaries, leap years | Test boundary conditions explicitly; include timezone-aware tests |325326### Security Gaps327328| Gap | Risk | Mitigation |329|-----|------|------------|330| Network isolation missing | Lateral movement if a service is compromised | Enforce network policies at namespace level; validate with penetration testing |331| Credential management | Secrets in env vars or code repositories | Adopt secret rotation via Vault or equivalent; audit all credential locations |332| TLS termination gaps | Insecure communication between mesh nodes | Mandate mTLS in the service mesh configuration |333| Audit logging absent | Cannot detect or investigate security incidents | Enable audit trails for all authentication, authorization, and data access events |334335---336337### Code Example: Production Readiness Scorecard (YAML)338339Use this YAML template to formalize review findings and track remediation conditions.340341```yaml342service: "payment-processing-api"343review_date: "2026-05-21"344owner: "payments-team@example.com"345tier: 1346categories:347 reliability:348 status: PASS349 findings:350 - SLI defined: p99 latency < 300ms, availability > 99.95%351 - Error budget tracked: 0.42% remaining of 0.5% monthly budget352 - Circuit breakers for all 7 external dependencies configured353 risks:354 - External fraud detection API has no fallback — mitigation in progress355 observability:356 status: PASS_WITH_CONDITIONS357 findings:358 - Golden Signals dashboards live and accessible via Grafana359 - Distributed tracing enabled via OpenTelemetry across all services360 - Runbooks linked for 8 of 12 active alerts361 risks:362 - 4 runbooks missing — owner to complete within 7 days363 security:364 status: PASS365 findings:366 - Zero critical/high CVEs in container images or dependencies367 - mTLS enforced between all services via service mesh368 - TLS 1.3 configured for external-facing endpoints369 deployment:370 status: PASS371 findings:372 - Canary deployment pipeline automated with rollback criteria373 - Immutable artifacts: Docker images tagged with semver + git SHA374 - Feature flags implemented for 3 active canary features375decision: NOT_APPROVED376conditions:377 - Complete runbooks for top 4 alerts within 7 days (by 2026-05-28)378 - Deliver fraud detection API fallback implementation within 14 days379```380381---382383## Decision Gate Criteria384385The review panel renders one of three decisions. Each has specific criteria:386387### Approved ✅388All eight readiness categories pass with zero findings. SLI/SLO targets are validated against real traffic patterns. Error budget tracking is operational. Runbooks for all active alerts are tested. Security scan shows zero critical/high CVEs. On-call coverage is confirmed and tested.389390### Approved with Conditions ⚠️391Minor gaps exist that can be remediated within 14 days without blocking the deployment. Typical conditions: missing runbooks for low-priority alerts, documentation updates pending, or a single non-critical CVE awaiting patch. The service may deploy immediately but must submit evidence of condition resolution before the deadline. A follow-up review is automatically scheduled.392393### Not Approved ❌394Critical gaps prevent safe production deployment. Blocking conditions include: no SLIs defined (no way to measure success), no on-call coverage assigned, unpatched critical CVEs, missing runbooks for core failure modes, or failed security audit findings that cannot be mitigated. The service must address all blockers and re-enter the PRR process before any production deployment attempt.395396---397398## Constraints399400### MUST DO401- Always define SLIs before SLOs — indicators measure user experience; targets set the bar402- Calculate error budget remaining at least weekly and publish to team channels403- Implement exponential backoff with jitter on every retry path — never use fixed-delay retries404- Run a restore drill for database backups at least quarterly, not just confirm backup jobs exist405- Enforce zero-trust network policies from day one; adding isolation after breach is far harder406- Require runbooks for every alert that pages an on-call engineer407- Use immutable artifacts with semver + git SHA tags; never deploy "latest" to production408- Document the RBAC matrix explicitly and enforce least privilege per service account409- Track DORA metrics from the first production deployment to establish baselines410- Include at least one chaos engineering test targeting your highest-risk failure mode411412### MUST NOT DO413- Define SLO targets based on infrastructure health alone (CPU, memory) without mapping to user-facing signals414- Disable circuit breakers or reduce retry limits "to fix performance" — these are safety mechanisms415- Store secrets in environment variables or source code; use a dedicated secrets manager416- Deploy without an automated rollback path; manual rollbacks during incidents increase MTTR417- Leave alerts running that have no associated runbook or on-call owner418- Skip canary analysis even for small changes; any unmeasured deployment is a gamble419- Allow feature flags to become permanent — every flag must have an expiry and cleanup plan420- Use the same monitoring dashboard for development and production traffic patterns421422---423424## Output Template425426When applying this skill during a Production Readiness Review, produce:4274281. **Service Summary** — Service name, version, owner, deployment target, and classification (Tier-1 / Tier-2 / Tier-3)4292. **Category-by-Category Assessment** — For each of the 8 categories, report status (PASS, PASS_WITH_CONDITIONS, FAIL), list findings with specific metric values or evidence, note any risks with severity ratings4303. **Dev-to-Production Gap Analysis** — Document any gaps identified between development and production environments for this service, categorized by type (environment, process, technical, security)4314. **Decision** — Clear verdict (Approved / Approved with Conditions / Not Approved) with numbered conditions if applicable4325. **Remediation Plan** — For conditional approvals: specific action items, owners, deadlines (max 14 days), and evidence required to close each condition4336. **Follow-up Schedule** — Date for conditional review completion, next quarterly audit date434435---436437## Related Skills438439| Skill | Purpose |440|-------|---------|441| `observability-patterns` | Deep-dive into the Three Pillars: metrics instrumentation, structured logging patterns, distributed tracing setup |442| `technical-debt-management` | Track and prioritize remediation of conditions identified during PRR that cannot be addressed immediately |443| `architecture-decision-records` | Document architectural choices that influence production readiness (e.g., technology selection, deployment model) |444445---446447## Live References448449> Authoritative documentation for Production Readiness Review practices and SRE standards.450451- [Google SRE Workbook — Production Readiness Review](https://sre.google/workbook/prr/)452- [Google SRE Books — Service Level Objectives](https://sre.google/sre-book/service-level-objectives/)453- [Google SRE Books — Monitoring Distributed Systems](https://sre.google/sre-book/monitoring-distributed-systems/)454- [PagerDuty Incident Response Framework](https://www.pagerduty.com/resources/playbooks/incident-response-guide/)455- [OpenTelemetry Documentation](https://opentelemetry.io/docs/)456- [Kubernetes Production Best Practices](https://cloud.google.com/architecture/best-practices-for-operating-kubernetes)457- [NIST Cybersecurity Framework — Supply Chain Security](https://www.nist.gov/cyberframework)