Demo — assessment results · all demos
Production Readiness Review
Completed 2026-08-24 · methodology /production-readiness-standard v1 · scoring model v1 · engine versions: scoring 1, risk 1, confidence 1
Self-assessment results, computed deterministically from your answers — not an audit, not a certification, and not a guarantee. Every number below links to the exact rule that produced it.
See the roadmap built from these results → or the executive report — both included in this demo.
Overall score — how the practices measured
50.7/ 100 Developing
Weighted capability average — single-focus-area run — overall equals the focus-area score (org Ops score arrives with the org plane, §17.5)
Maturity — how established the practices are
L3 Standardized
Numeric band L3 Standardized
Operational risk — how exposed you are
CRITICAL 92.16/100
Impact × Likelihood × control gap — forced CRITICAL by a missing critical control (below), independent of maturity.
Evidence confidence — how much the answers can be trusted
70.0/ 100
0.50×100.00 + 0.30×0.00 + 0.20×100.00 = 70.00 — an annotation only; it never changes the score, maturity, or risk above.
Findings — controls that need attention
29 findings · 1 critical · 5 high · 23 medium
- CRITICALrisk 92.16 · CRITICALcritical control
Critical control not implemented: If today's release broke the service, how would you get back? (rs_rollback_tested)
Answer recorded: "manual_steps" (evidence confidence 0/3). Scoring: option:manual_steps → normalized 0.15 (met = 1.00). Risk: impact 4 × likelihood 4 = 16 · control missing (gap ×1.00) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 92.16 (CRITICAL) · CRITICAL control not implemented — forces CRITICAL
Why it matters: critical control "rs_rollback_tested" is missing (impact 4, likelihood 4) — forces CRITICAL regardless of score or maturity
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P0 · 69.95critical fixMake rollback a tested pipeline stage
If rollback has not been exercised recently it does not exist — rehearse it, time it, and keep it inside the pipeline.
/prr-test-rollbacks-on-schedule · impact 75 · effort M · priority math
0.30×risk 92 + 0.25×impact 75 + 0.20×maturity-gap 85 + 0.10×unlocks 0 + 0.10×quick-win 41 + 0.05×strategic-fit 50 = 69.95
source: control:production-readiness-standard:rs_rollback_tested · answer recorded: manual_steps
- HIGHrisk 41.47 · HIGH
Control partially met: Is sensitive data encrypted at rest (databases, buckets, disks — and their backups)? (dp_encryption_at_rest)
Answer recorded: "primary_only" (evidence confidence 0/3). Scoring: option:primary_only → normalized 0.40 (met = 1.00). Risk: impact 4 × likelihood 3 = 12 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 41.47 (HIGH)
Why it matters: impact 4 × likelihood 3 = 12 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 41.47 (HIGH)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P2 · 57.20critical fixEncrypt sensitive data at rest
Every store holding sensitive data is encrypted at rest with managed keys and an inventory that says so.
/prr-encrypt-sensitive-data-at-rest · impact 80 · effort S · priority math
0.30×risk 41 + 0.25×impact 80 + 0.20×maturity-gap 55 + 0.10×unlocks 50 + 0.10×quick-win 64 + 0.05×strategic-fit 50 = 57.20
source: control:production-readiness-standard:dp_encryption_at_rest · answer recorded: primary_only
- HIGHrisk 41.47 · HIGH
Control partially met: Is there a written recovery plan for the service, and when was it last rehearsed? (dr_plan_rehearsed)
Answer recorded: "plan_never_rehearsed" (evidence confidence 0/3). Scoring: option:plan_never_rehearsed → normalized 0.40 (met = 1.00). Risk: impact 4 × likelihood 3 = 12 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 41.47 (HIGH)
Why it matters: impact 4 × likelihood 3 = 12 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 41.47 (HIGH)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P2 · 50.65critical fixWrite and rehearse the disaster recovery plan
A one-page, service-prioritized recovery plan that has actually been walked through — not a 40-page document nobody has opened.
/prr-write-and-rehearse-dr-plan · impact 85 · effort L · priority math
0.30×risk 41 + 0.25×impact 85 + 0.20×maturity-gap 60 + 0.10×unlocks 0 + 0.10×quick-win 26 + 0.05×strategic-fit 50 = 50.65
source: control:production-readiness-standard:dr_plan_rehearsed · answer recorded: plan_never_rehearsed
- HIGHrisk 41.47 · HIGH
Control partially met: When did you last successfully restore this service's critical data from backup? (dr_restore_tested)
Answer recorded: "verified_year" (evidence confidence 0/3). Scoring: option:verified_year → normalized 0.50 (met = 1.00). Risk: impact 4 × likelihood 3 = 12 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 41.47 (HIGH)
Why it matters: impact 4 × likelihood 3 = 12 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 41.47 (HIGH)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P2 · 47.30critical fixVerify backups by restoring them
Prove the backup exists by restoring it — a scheduled restore drill with recorded RTO/RPO turns hope into evidence.
/prr-verify-backups-by-restoring · impact 90 · effort M · priority math
0.30×risk 41 + 0.25×impact 90 + 0.20×maturity-gap 25 + 0.10×unlocks 0 + 0.10×quick-win 50 + 0.05×strategic-fit 50 = 47.30
source: control:production-readiness-standard:dr_restore_tested · answer recorded: verified_year
- HIGHrisk 41.47 · HIGH
Control partially met: If the primary instance, zone, or node hosting the service failed right now, what would happen? (rel_redundancy)
Answer recorded: "failover_untested" (evidence confidence 0/3). Scoring: option:failover_untested → normalized 0.40 (met = 1.00). Risk: impact 4 × likelihood 3 = 12 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 41.47 (HIGH)
Why it matters: impact 4 × likelihood 3 = 12 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 41.47 (HIGH)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P2 · 47.85critical fixRemove the next single point of failure
Map the blast radius, rank the single points, and eliminate them one at a time — starting with the one that takes everything down.
/prr-remove-single-points-of-failure · impact 75 · effort L · priority math
0.30×risk 41 + 0.25×impact 75 + 0.20×maturity-gap 60 + 0.10×unlocks 0 + 0.10×quick-win 23 + 0.05×strategic-fit 50 = 47.85
source: control:production-readiness-standard:rel_redundancy · answer recorded: failover_untested
- HIGHrisk 41.47 · HIGH
Control partially met: Do all privileged (production) human paths require MFA or hardware keys? (sec_mfa_privileged)
Answer recorded: "some_paths" (evidence confidence 0/3). Scoring: option:some_paths → normalized 0.40 (met = 1.00). Risk: impact 4 × likelihood 3 = 12 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 41.47 (HIGH)
Why it matters: impact 4 × likelihood 3 = 12 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 41.47 (HIGH)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P2 · 52.50critical fixRun a recurring access review
Quarterly, someone who understands the systems confirms every human and machine account still needs the access it has.
/prr-recurring-access-review · impact 80 · effort M · priority math
0.30×risk 41 + 0.25×impact 80 + 0.20×maturity-gap 54 + 0.10×unlocks 25 + 0.10×quick-win 44 + 0.05×strategic-fit 50 = 52.50
source: control:production-readiness-standard:sec_mfa_privileged · answer recorded: some_paths
- MEDIUMrisk 31.10 · MODERATE
Control partially met: When did someone last review who and what has access to this service's accounts, roles, and data? (sec_access_review)
Answer recorded: "reviewed_year" (evidence confidence 0/3). Scoring: option:reviewed_year → normalized 0.50 (met = 1.00). Risk: impact 3 × likelihood 3 = 9 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 31.10 (MODERATE)
Why it matters: impact 3 × likelihood 3 = 9 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 31.10 (MODERATE)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P2 · 49.50critical fixRun a recurring access review
Quarterly, someone who understands the systems confirms every human and machine account still needs the access it has.
/prr-recurring-access-review · impact 80 · effort M · priority math
0.30×risk 31 + 0.25×impact 80 + 0.20×maturity-gap 54 + 0.10×unlocks 25 + 0.10×quick-win 44 + 0.05×strategic-fit 50 = 49.50
source: control:production-readiness-standard:sec_access_review · answer recorded: reviewed_year
- MEDIUMrisk 31.10 · MODERATE
Control partially met: How fast are known critical vulnerabilities in the service's dependencies, images, or hosts remediated? (sec_patch_cadence)
Answer recorded: "sla_weeks" (evidence confidence 0/3). Scoring: option:sla_weeks → normalized 0.60 (met = 1.00). Risk: impact 3 × likelihood 3 = 9 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 31.10 (MODERATE)
Why it matters: impact 3 × likelihood 3 = 9 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 31.10 (MODERATE)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P3 · 39.65Patch on a cadence with an SLA
A defined remediation SLA by severity, pipeline-embedded scanning, and a monthly report that shows the backlog shrinking.
/prr-patch-cadence · impact 65 · effort M · priority math
0.30×risk 31 + 0.25×impact 65 + 0.20×maturity-gap 40 + 0.10×unlocks 0 + 0.10×quick-win 36 + 0.05×strategic-fit 50 = 39.65
source: control:production-readiness-standard:sec_patch_cadence · answer recorded: sla_weeks
- MEDIUMrisk 31.10 · MODERATE
Control partially met: Where do this service's credentials (API keys, DB passwords, tokens) live? (sec_secrets_management)
Answer recorded: "manager_no_rotation" (evidence confidence 0/3). Scoring: option:manager_no_rotation → normalized 0.55 (met = 1.00). Risk: impact 3 × likelihood 3 = 9 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 31.10 (MODERATE)
Why it matters: impact 3 × likelihood 3 = 9 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 31.10 (MODERATE)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P2 · 48.30critical fixMove secrets out of code and config files
Every credential lives in a managed secret store with rotation and audit — nothing sensitive in git, images, or plain env files.
/prr-move-secrets-into-manager · impact 90 · effort M · priority math
0.30×risk 31 + 0.25×impact 90 + 0.20×maturity-gap 45 + 0.10×unlocks 0 + 0.10×quick-win 50 + 0.05×strategic-fit 50 = 48.30
source: control:production-readiness-standard:sec_secrets_management · answer recorded: manager_no_rotation
- MEDIUMrisk 20.74 · MODERATE
Control partially met: How much headroom does the service have over its current peak load? (cap_headroom)
Answer recorded: "rough_idea" (evidence confidence 0/3). Scoring: option:rough_idea → normalized 0.50 (met = 1.00). Risk: impact 3 × likelihood 2 = 6 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 20.74 (MODERATE)
Why it matters: impact 3 × likelihood 2 = 6 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 20.74 (MODERATE)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P2 · 41.95Give every workload resource requests and limits
Requests and limits on every container so a noisy neighbor cannot starve the node — and capacity planning gets real numbers.
/prr-resource-limits-everywhere · impact 55 · effort S · priority math
0.30×risk 21 + 0.25×impact 55 + 0.20×maturity-gap 50 + 0.10×unlocks 50 + 0.10×quick-win 44 + 0.05×strategic-fit 50 = 41.95
source: control:production-readiness-standard:cap_headroom · answer recorded: rough_idea
- MEDIUMrisk 20.74 · MODERATE
Control partially met: Do all workloads declare resource requests and limits (with admission enforcing them)? (cap_k8s_limits)
Answer recorded: "most" (evidence confidence 0/3). Scoring: option:most → normalized 0.50 (met = 1.00). Risk: impact 2 × likelihood 3 = 6 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 20.74 (MODERATE)
Why it matters: impact 2 × likelihood 3 = 6 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 20.74 (MODERATE)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P2 · 41.95Give every workload resource requests and limits
Requests and limits on every container so a noisy neighbor cannot starve the node — and capacity planning gets real numbers.
/prr-resource-limits-everywhere · impact 55 · effort S · priority math
0.30×risk 21 + 0.25×impact 55 + 0.20×maturity-gap 50 + 0.10×unlocks 50 + 0.10×quick-win 44 + 0.05×strategic-fit 50 = 41.95
source: control:production-readiness-standard:cap_k8s_limits · answer recorded: most
- MEDIUMrisk 20.74 · MODERATE
Control partially met: Is the data this service holds classified by sensitivity (public / internal / sensitive / regulated)? (dp_classification)
Answer recorded: "classified_informal" (evidence confidence 0/3). Scoring: option:classified_informal → normalized 0.50 (met = 1.00). Risk: impact 2 × likelihood 3 = 6 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 20.74 (MODERATE)
Why it matters: impact 2 × likelihood 3 = 6 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 20.74 (MODERATE)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P2 · 51.20critical fixEncrypt sensitive data at rest
Every store holding sensitive data is encrypted at rest with managed keys and an inventory that says so.
/prr-encrypt-sensitive-data-at-rest · impact 80 · effort S · priority math
0.30×risk 21 + 0.25×impact 80 + 0.20×maturity-gap 55 + 0.10×unlocks 50 + 0.10×quick-win 64 + 0.05×strategic-fit 50 = 51.20
source: control:production-readiness-standard:dp_classification · answer recorded: classified_informal
- MEDIUMrisk 20.74 · MODERATE
Control partially met: When the paging alert fires, how often is it a real user-facing problem? (obs_alert_quality)
Answer recorded: "mixed" (evidence confidence 0/3). Scoring: option:mixed → normalized 0.50 (met = 1.00). Risk: impact 2 × likelihood 3 = 6 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 20.74 (MODERATE)
Why it matters: impact 2 × likelihood 3 = 6 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 20.74 (MODERATE)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P3 · 37.10Page on symptoms, not causes
Rewire alerting around SLO burn and user-visible symptoms so the pager means something again.
/prr-alert-on-symptoms · impact 60 · effort M · priority math
0.30×risk 21 + 0.25×impact 60 + 0.20×maturity-gap 50 + 0.10×unlocks 0 + 0.10×quick-win 33 + 0.05×strategic-fit 50 = 37.10
source: control:production-readiness-standard:obs_alert_quality · answer recorded: mixed
- MEDIUMrisk 20.74 · MODERATE
Control partially met: How is out-of-hours coverage handled for this service? (ops_on_call)
Answer recorded: "primary_backup" (evidence confidence 0/3). Scoring: option:primary_backup → normalized 0.50 (met = 1.00). Risk: impact 2 × likelihood 3 = 6 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 20.74 (MODERATE)
Why it matters: impact 2 × likelihood 3 = 6 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 20.74 (MODERATE)
source: control:production-readiness-standard:ops_on_call · answer recorded: primary_backup
- MEDIUMrisk 20.74 · MODERATE
Control partially met: For the service's top failure modes, what does the on-call engineer have? (ops_runbook_coverage)
Answer recorded: "written_runbooks" (evidence confidence 0/3). Scoring: option:written_runbooks → normalized 0.55 (met = 1.00). Risk: impact 2 × likelihood 3 = 6 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 20.74 (MODERATE)
Why it matters: impact 2 × likelihood 3 = 6 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 20.74 (MODERATE)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P3 · 38.45Keep runbooks alive for the top failure modes
A runbook per top failure mode, tested during real incidents and rehearsals, with an owner and a review date.
/prr-keep-runbooks-alive · impact 55 · effort S · priority math
0.30×risk 21 + 0.25×impact 55 + 0.20×maturity-gap 45 + 0.10×unlocks 0 + 0.10×quick-win 44 + 0.05×strategic-fit 100 = 38.45
source: control:production-readiness-standard:ops_runbook_coverage · answer recorded: written_runbooks
- MEDIUMrisk 13.82 · LOW
Control partially met: Is capacity forecasted — seasonal peaks, growth, or known events planned for in advance? (cap_forecast)
Answer recorded: "reactive_scaling" (evidence confidence 0/3). Scoring: option:reactive_scaling → normalized 0.50 (met = 1.00). Risk: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Why it matters: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P3 · 39.85Give every workload resource requests and limits
Requests and limits on every container so a noisy neighbor cannot starve the node — and capacity planning gets real numbers.
/prr-resource-limits-everywhere · impact 55 · effort S · priority math
0.30×risk 14 + 0.25×impact 55 + 0.20×maturity-gap 50 + 0.10×unlocks 50 + 0.10×quick-win 44 + 0.05×strategic-fit 50 = 39.85
source: control:production-readiness-standard:cap_forecast · answer recorded: reactive_scaling
- MEDIUMrisk 13.82 · LOW
Control partially met: How much of this service's cloud spend can be attributed to a team or product? (cost_allocation)
Answer recorded: "partially_attributed" (evidence confidence 0/3). Scoring: option:partially_attributed → normalized 0.50 (met = 1.00). Risk: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Why it matters: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P3 · 33.45Start FinOps with allocation and a budget
Attribute 80% of spend to teams, put a budget with alerts on each, and review the trend monthly — that is the whole first phase.
/prr-start-finops-allocation · impact 55 · effort M · priority math
0.30×risk 14 + 0.25×impact 55 + 0.20×maturity-gap 50 + 0.10×unlocks 0 + 0.10×quick-win 30 + 0.05×strategic-fit 50 = 33.45
source: control:production-readiness-standard:cost_allocation · answer recorded: partially_attributed
- MEDIUMrisk 13.82 · LOW
Control partially met: Are there budgets with alerts (and anomaly detection) on this service's spend? (cost_budget_alerts)
Answer recorded: "budgets_only" (evidence confidence 0/3). Scoring: option:budgets_only → normalized 0.50 (met = 1.00). Risk: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Why it matters: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
source: control:production-readiness-standard:cost_budget_alerts · answer recorded: budgets_only
- MEDIUMrisk 13.82 · LOW
Control partially met: Is the exact artifact tested in staging the one deployed to production? (dep_artifact_promotion)
Answer recorded: "rebuilt" (evidence confidence 0/3). Scoring: option:rebuilt → normalized 0.50 (met = 1.00). Risk: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Why it matters: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
source: control:production-readiness-standard:dep_artifact_promotion · answer recorded: rebuilt
- MEDIUMrisk 13.82 · LOW
Control partially met: How do changes reach production? (dep_pipeline_only)
Answer recorded: "pipeline_exceptions" (evidence confidence 0/3). Scoring: option:pipeline_exceptions → normalized 0.70 (met = 1.00). Risk: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Why it matters: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
source: control:production-readiness-standard:dep_pipeline_only · answer recorded: pipeline_exceptions
- MEDIUMrisk 13.82 · LOW
Control partially met: Is there a retention rule for the data — how long it is kept and how it is deleted? (dp_retention)
Answer recorded: "manual_policy" (evidence confidence 0/3). Scoring: option:manual_policy → normalized 0.50 (met = 1.00). Risk: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Why it matters: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P2 · 49.10critical fixEncrypt sensitive data at rest
Every store holding sensitive data is encrypted at rest with managed keys and an inventory that says so.
/prr-encrypt-sensitive-data-at-rest · impact 80 · effort S · priority math
0.30×risk 14 + 0.25×impact 80 + 0.20×maturity-gap 55 + 0.10×unlocks 50 + 0.10×quick-win 64 + 0.05×strategic-fit 50 = 49.10
source: control:production-readiness-standard:dp_retention · answer recorded: manual_policy
- MEDIUMrisk 13.82 · LOW
Control partially met: When something behaves oddly in production, how long does it take to find out why? (obs_debug_latency)
Answer recorded: "hour" (evidence confidence 0/3). Scoring: option:hour → normalized 0.60 (met = 1.00). Risk: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Why it matters: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
source: control:production-readiness-standard:obs_debug_latency · answer recorded: hour
- MEDIUMrisk 13.82 · LOW
Control partially met: How far up the telemetry ladder is the service? (obs_signals)
Answer recorded: "logs_metrics" (evidence confidence 0/3). Scoring: option:logs_metrics → normalized 0.50 (met = 1.00). Risk: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Why it matters: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
source: control:production-readiness-standard:obs_signals · answer recorded: logs_metrics
- MEDIUMrisk 13.82 · LOW
Control partially met: Do the service's deployments define liveness and readiness probes that reflect real health? (ops_k8s_probes)
Answer recorded: "shallow_probes" (evidence confidence 0/3). Scoring: option:shallow_probes → normalized 0.50 (met = 1.00). Risk: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Why it matters: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
source: control:production-readiness-standard:ops_k8s_probes · answer recorded: shallow_probes
- MEDIUMrisk 13.82 · LOW
Control partially met: Are the service's key latency percentiles (p50/p95/p99) tracked where the team can see them? (perf_latencies_tracked)
Answer recorded: "averages_only" (evidence confidence 0/3). Scoring: option:averages_only → normalized 0.40 (met = 1.00). Risk: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Why it matters: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
source: control:production-readiness-standard:perf_latencies_tracked · answer recorded: averages_only
- MEDIUMrisk 13.82 · LOW
Control partially met: When the error budget is exhausted, does anything actually change (release freeze, reliability work prioritized)? (rel_error_budget)
Answer recorded: "informal" (evidence confidence 0/3). Scoring: option:informal → normalized 0.50 (met = 1.00). Risk: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Why it matters: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P2 · 42.10Define SLOs and an error-budget policy
Pick the user-facing indicators that matter, set objectives from history not optimism, and write down what happens when the budget burns.
/prr-define-slos-and-error-budgets · impact 70 · effort M · priority math
0.30×risk 14 + 0.25×impact 70 + 0.20×maturity-gap 45 + 0.10×unlocks 25 + 0.10×quick-win 39 + 0.05×strategic-fit 100 = 42.10
source: control:production-readiness-standard:rel_error_budget · answer recorded: informal
- MEDIUMrisk 13.82 · LOW
Control partially met: Does the service have a documented SLO with a defined SLI (availability or latency percentile)? (rel_slo_defined)
Answer recorded: "slo_no_policy" (evidence confidence 0/3). Scoring: option:slo_no_policy → normalized 0.60 (met = 1.00). Risk: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Why it matters: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P2 · 42.10Define SLOs and an error-budget policy
Pick the user-facing indicators that matter, set objectives from history not optimism, and write down what happens when the budget burns.
/prr-define-slos-and-error-budgets · impact 70 · effort M · priority math
0.30×risk 14 + 0.25×impact 70 + 0.20×maturity-gap 45 + 0.10×unlocks 25 + 0.10×quick-win 39 + 0.05×strategic-fit 100 = 42.10
source: control:production-readiness-standard:rel_slo_defined · answer recorded: slo_no_policy
- MEDIUMrisk 13.82 · LOW
Control partially met: How do releases reach the full fleet? (rs_progressive)
Answer recorded: "staged_manual" (evidence confidence 0/3). Scoring: option:staged_manual → normalized 0.60 (met = 1.00). Risk: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Why it matters: impact 2 × likelihood 2 = 4 · control partial (gap ×0.60) · production ×1.20 (confirmed) · internet_exposed ×1.20 (confirmed) → normalized 13.82 (LOW)
Suggested fixes — ordered by the same deterministic priority formula every time, from the published, source-backed catalog
- P3 · 32.95Adopt progressive rollouts with auto-halt
Ship to 1%, watch the SLOs, then widen — and let the pipeline stop the rollout when the metrics object.
/prr-progressive-rollouts · impact 65 · effort L · priority math
0.30×risk 14 + 0.25×impact 65 + 0.20×maturity-gap 40 + 0.10×unlocks 0 + 0.10×quick-win 20 + 0.05×strategic-fit 50 = 32.95
source: control:production-readiness-standard:rs_progressive · answer recorded: staged_manual
- MEDIUMrisk 0.00 · LOW
Control partially met: After a change-caused incident, does the learning become a pipeline or process change? (rs_change_failure_learning)
Answer recorded: "L3" (evidence confidence 0/3). Scoring: maturity ladder L3 → 0.50 → normalized 0.50 (met = 1.00). Risk: no rated operational-risk rule is attached to this control.
Why it matters: Weight 1 in capability "Change Management" (scored 50.00/100) — meeting this control fully lifts the capability score.
source: control:production-readiness-standard:rs_change_failure_learning · answer recorded: L3
Methodology, versions, and answer counts
- Formula (overall)
- single-focus-area run — overall equals the focus-area score (org Ops score arrives with the org plane, §17.5)
- Scoring model
- v1, pinned at run start — later model edits never change this result
- Engine versions
- scoring 1 · risk 1 · confidence 1
- Applicable score-bearing questions
- 30
- Scored
- 30
- N/A (excluded from scoring — never counted as zero)
- 1 (1 marked by you, 0 auto by rules)
- Unanswered optional
- 0
- Context-only (never scored)
- 5
Capability breakdown
Bar color mirrors the band labels used everywhere on this page (red = below 45, amber = 45–64, green = 65+); the number is always printed too.
| Capability | Weight | Score | Band | Questions | Formula |
|---|---|---|---|---|---|
| SLO Management | 1 | 55.0 | Developing | 2 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 2.2000/4.000 |
| Redundancy & Failure Domains | 1 | 40.0 | Low | 1 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.2000/3.000 |
| Access Control | 1 | 46.0 | Developing | 2 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 2.3000/5.000 |
| Secrets Management | 1 | 55.0 | Developing | 1 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.6500/3.000 |
| Patch Management | 1 | 60.0 | Developing | 1 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.2000/2.000 |
| Deployment Automation | 1 | 60.0 | Developing | 2 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 2.4000/4.000 |
| Monitoring Coverage | 1 | 48.0 | Developing | 3 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 2.4000/5.000 |
| Alerting | 1 | 50.0 | Developing | 1 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.0000/2.000 |
| Distributed Tracing | 1 | 60.0 | Developing | 1 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.2000/2.000 |
| Backup & Restore | 1 | 75.0 | Strong | 2 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 4.5000/6.000 |
| DR Readiness & Rehearsal | 1 | 40.0 | Low | 1 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 0.8000/2.000 |
| Data Protection | 1 | 45.0 | Developing | 3 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 2.7000/6.000 |
| Runbook Coverage | 1 | 55.0 | Developing | 1 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.1000/2.000 |
| On-Call Management | 1 | 50.0 | Developing | 1 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.0000/2.000 |
| Performance Validation | 1 | N/A — every applicable question is N/A | not banded | 0 scored · 1 N/A | — |
| Capacity Planning | 1 | 50.0 | Developing | 3 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 2.5000/5.000 |
| Rollback Capability | 1 | 15.0 | Low | 1 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 0.4500/3.000 |
| Progressive Delivery | 1 | 60.0 | Developing | 1 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.2000/2.000 |
| Change Management | 1 | 50.0 | Developing | 1 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 0.5000/1.000 |
| Cost Visibility | 1 | 50.0 | Developing | 1 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.0000/2.000 |
| Cost Governance | 1 | 50.0 | Developing | 1 scored · 0 N/A | 100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.0000/2.000 |
Maturity gates
- MetBackups restore within the year (required for L3 Standardized) — answered "verified_year" — Requires one of "verified_90d", "verified_year"
- MetReal alerting exists (required for L3 Standardized) — answered "mixed" — Requires one of "high_precision", "mixed"
- MetAn SLO is defined and measured (required for L4 Measured) — answered "slo_no_policy" — Requires one of "slo_and_policy", "slo_no_policy"
- FailedRollback exercised within 90 days (required for L5 Optimized) — answered "manual_steps", requires "rollback_rehearsed"
Critical control overrides
- Criticalcritical control "rs_rollback_tested" is missing (impact 4, likelihood 4) — forces CRITICAL regardless of score or maturity.
What is going well
- dr_backups_automated 100% · weight 3 · Backup & Restoreresolved by condition:true
- sec_secrets_management 55% · weight 3 · Secrets Managementresolved by option:manager_no_rotation
- dr_restore_tested 50% · weight 3 · Backup & Restoreresolved by option:verified_year
- sec_access_review 50% · weight 3 · Access Controlresolved by option:reviewed_year
- dep_pipeline_only 70% · weight 2 · Deployment Automationresolved by option:pipeline_exceptions
Where the biggest gaps are
- perf_latencies_tracked 40% · weight 1 · Monitoring Coverageresolved by option:averages_only
- rs_rollback_tested 15% · weight 3 · Rollback Capabilityresolved by option:manual_steps
- cap_forecast 50% · weight 1 · Capacity Planningresolved by option:reactive_scaling
- dp_retention 50% · weight 1 · Data Protectionresolved by option:manual_policy
- rs_change_failure_learning 50% · weight 1 · Change Managementresolved by maturity ladder L3 → 0.50