Skip to main content
Demo preview. Sample data for FlowForge, a fictional company — produced by the real scoring engine once and frozen; nothing here is live or user data. Sign in to run this on your own operations →

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

  1. 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

  2. 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

  3. 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

  4. 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

  5. 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

  6. 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

  7. 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

  8. 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

  9. 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

  10. 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

  11. 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

  12. 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

  13. 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

  14. 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

  15. 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

  16. 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

  17. 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

  18. 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

  19. 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

  20. 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

  21. 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

  22. 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

  23. 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

  24. 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

  25. 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

  26. 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

  27. 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

  28. 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

  29. 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

Capability scores (0–100) — higher is stronger. Values are the frozen snapshot values; the table below is the authoritative equivalent.

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 scores, weights, and formulas — N/A capabilities are listed as N/A, never zero
CapabilityWeightScoreBandQuestionsFormula
SLO Management155.0Developing2 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 2.2000/4.000
Redundancy & Failure Domains140.0Low1 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.2000/3.000
Access Control146.0Developing2 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 2.3000/5.000
Secrets Management155.0Developing1 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.6500/3.000
Patch Management160.0Developing1 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.2000/2.000
Deployment Automation160.0Developing2 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 2.4000/4.000
Monitoring Coverage148.0Developing3 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 2.4000/5.000
Alerting150.0Developing1 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.0000/2.000
Distributed Tracing160.0Developing1 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.2000/2.000
Backup & Restore175.0Strong2 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 4.5000/6.000
DR Readiness & Rehearsal140.0Low1 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 0.8000/2.000
Data Protection145.0Developing3 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 2.7000/6.000
Runbook Coverage155.0Developing1 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.1000/2.000
On-Call Management150.0Developing1 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.0000/2.000
Performance Validation1N/A — every applicable question is N/Anot banded0 scored · 1 N/A—
Capacity Planning150.0Developing3 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 2.5000/5.000
Rollback Capability115.0Low1 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 0.4500/3.000
Progressive Delivery160.0Developing1 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.2000/2.000
Change Management150.0Developing1 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 0.5000/1.000
Cost Visibility150.0Developing1 scored · 0 N/A100 × Σ(scoreᵢ·wᵢ)/Σ(wᵢ) = 100 × 1.0000/2.000
Cost Governance150.0Developing1 scored · 0 N/A100 × Σ(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

← All demos·Next: the roadmap from these results