Inferensys

Prompt

ADR Risk Assessment Prompt

A practical prompt playbook for using ADR Risk Assessment Prompt in production AI workflows.
Risk analyst performing AI risk assessment on laptop, risk matrices visible, casual office risk session.
PROMPT PLAYBOOK

When to Use This Prompt

Defines the precise job-to-be-done, the required inputs, and the boundaries for the ADR Risk Assessment Prompt.

This prompt is for architects and engineering leads who need to surface and document the risks associated with a specific architecture decision before it is finalized. The job-to-be-done is disciplined risk surfacing, not general brainstorming. You should have a draft decision, a set of options, or a proposed architecture change already on the table. The prompt expects you to provide the decision context, the chosen or proposed option, and any constraints you are operating under. It then produces a structured risk register with likelihood, impact, mitigation options, and an explicit acceptance rationale that can be reviewed, challenged, and archived alongside the ADR.

Use this prompt when the decision is concrete enough to analyze but not yet immutable. Ideal inputs include a draft ADR, a design document, or a technical proposal with a clear option selected. The prompt works best when you supply specific architectural details—such as the components involved, data flow, and operational boundaries—rather than abstract project goals. Do not use this prompt for organizational risks, personnel risks, or roadmap-level business risks that fall outside the scope of a single architecture decision. It is also not a substitute for a security threat model or a formal failure modes and effects analysis (FMEA), though its output can feed into those processes.

Before running this prompt, gather the decision context, the proposed approach, any rejected alternatives, and known constraints such as latency budgets, compliance requirements, or team capabilities. The prompt will ask you to review the generated risk register for omissions and overconfidence in mitigation claims. After receiving the output, you should validate it against your own engineering judgment, add any missing risks, and ensure the acceptance rationale is honest about residual risk. The final risk register should be appended to the ADR as a living section that is revisited if the decision's context changes.

PRACTICAL GUARDRAILS

Use Case Fit

Where the ADR Risk Assessment Prompt works, where it fails, and the operational conditions required for reliable use.

01

Good Fit: Structured Decision Context

Use when: the decision context, constraints, and stakeholders are documented or extractable. The prompt performs best when it has concrete material to analyze rather than vague problem statements. Guardrail: run a context extraction step first if inputs are scattered across meeting notes, design docs, or incident reports.

02

Bad Fit: Greenfield Brainstorming

Avoid when: no architectural options have been proposed yet and the team is still exploring possibilities. Risk assessment requires candidate decisions to evaluate. Without them, the model invents straw-man options or produces generic risks. Guardrail: use the Decision Options Enumeration Prompt first, then feed the shortlisted options into this prompt.

03

Required Inputs

Minimum inputs: a proposed decision statement, at least one alternative considered, and the system context. Without these, the risk register will be shallow or hallucinated. Guardrail: validate inputs against a completeness checklist before invoking the prompt. Reject requests with missing decision context rather than generating low-quality output.

04

Operational Risk: Overconfidence in Mitigation

What to watch: the model may present mitigation options with unwarranted confidence, making partial fixes sound complete. This is especially dangerous for security, reliability, and compliance risks. Guardrail: require a human reviewer to assess each mitigation's completeness and add a confidence annotation before the ADR is accepted.

05

Operational Risk: Risk Omission

What to watch: the model may miss risks that require deep domain knowledge, organization-specific context, or awareness of undocumented system interactions. Guardrail: pair the prompt output with a structured peer review. Maintain a checklist of commonly missed risk categories (operational, security, compliance, team capability) and verify coverage manually.

06

Scale Limit: Single Decision Scope

Avoid when: you need cross-ADR risk analysis, dependency-aware risk propagation, or portfolio-level risk aggregation. This prompt operates on one decision at a time. Guardrail: for multi-ADR analysis, use the ADR Dependency Mapping Prompt and ADR Consistency Check Prompt, then feed the combined output into a separate cross-decision risk review.

PROMPT PLAYBOOK

Copy-Ready Prompt Template

A copy-ready prompt for generating a structured risk register from an architecture decision record.

This prompt template is designed to receive a draft or finalized Architecture Decision Record (ADR) and produce a structured risk assessment. It forces the model to identify risks across multiple categories, estimate likelihood and impact, propose concrete mitigations, and state an explicit acceptance rationale. The output is a machine-readable risk register that can be validated, stored alongside the ADR, and reviewed by a human before the decision is finalized.

text
You are a senior systems architect and risk analyst. Your task is to perform a structured risk assessment on the provided Architecture Decision Record (ADR).

## INPUT
[ADR_DOCUMENT]

## CONSTRAINTS
- Identify risks across these categories: Technical, Operational, Security, Cost, Schedule, Team/Organizational, and Compliance.
- For each risk, provide a likelihood rating (Low, Medium, High) and an impact rating (Low, Medium, High).
- For each risk rated Medium or higher in either dimension, propose at least one concrete mitigation.
- State an explicit acceptance rationale for each risk that will not be fully mitigated.
- Do not invent risks not supported by the ADR text. If a category has no identifiable risks, state "No risks identified in this category."
- Do not claim certainty where evidence is missing. Use language like "based on the ADR," "appears to," or "may."

## OUTPUT_SCHEMA
Return a single JSON object with the following structure:
{
  "decision_title": "string",
  "risk_assessment_date": "string (ISO 8601)",
  "overall_risk_posture": "Low Risk | Medium Risk | High Risk | Critical Risk",
  "risks": [
    {
      "risk_id": "string (e.g., RISK-001)",
      "category": "Technical | Operational | Security | Cost | Schedule | Team/Organizational | Compliance",
      "description": "string",
      "likelihood": "Low | Medium | High",
      "impact": "Low | Medium | High",
      "mitigations": ["string"],
      "acceptance_rationale": "string or null if fully mitigated"
    }
  ],
  "omission_notes": ["string (risks that might exist but are not documented in the ADR)"]
}

## EXAMPLES
[OPTIONAL_FEW_SHOT_EXAMPLES]

## RISK_LEVEL
[HIGH_RISK_THRESHOLD_DEFINITION]

Adaptation guidance: Replace [ADR_DOCUMENT] with the full text of the ADR under review. The [OPTIONAL_FEW_SHOT_EXAMPLES] placeholder can be populated with one or two example risk assessments from your organization's past ADRs to calibrate the model's severity judgment. The [HIGH_RISK_THRESHOLD_DEFINITION] placeholder should contain your team's definition of what constitutes a High or Critical risk posture—for example, "Any risk with High likelihood and High impact, or any unmitigated security risk." After running this prompt, validate the output JSON against the schema before storing it. For regulated environments, always route the output to a human reviewer before the ADR is accepted.

IMPLEMENTATION TABLE

Prompt Variables

Each placeholder the ADR Risk Assessment Prompt needs to work reliably, with validation notes for production harness integration.

PlaceholderPurposeExampleValidation Notes

[DECISION_SUMMARY]

The architectural decision being assessed for risk

Adopt PostgreSQL as the primary transactional database for the user service

Required. Must be a single, specific decision statement. Reject if empty, multi-decision, or purely aspirational language without a concrete choice.

[SYSTEM_CONTEXT]

The system boundary, dependencies, and constraints surrounding the decision

User service handles authentication, profile storage, and session management. Depends on identity provider via OIDC. Must meet SOC 2 data residency requirements.

Required. Must include at least one dependency and one constraint. Reject if only a system name without operational context.

[OPTIONS_CONSIDERED]

The alternatives evaluated before reaching the decision

  1. PostgreSQL (selected) 2. MySQL 3. DynamoDB 4. CockroachDB

Required. Must list at least two alternatives including the selected option. Reject if only one option or if options are trivial strawmen with no real consideration.

[STAKEHOLDER_CONCERNS]

Known concerns, constraints, or requirements from affected teams or roles

Security team requires encryption at rest. SRE team concerned about backup recovery time. Product team needs sub-50ms p95 read latency.

Optional but strongly recommended. If empty, add a note to the output that stakeholder input was not provided and risks may be underidentified. Validate that concerns are attributed to specific roles or teams.

[EXISTING_ARCHITECTURE_NOTES]

Relevant existing architecture decisions, patterns, or standards that constrain this decision

ADR-012 mandates relational databases for transactional workloads. ADR-008 requires all data stores to support point-in-time recovery.

Optional. If provided, validate that references are traceable to actual ADR identifiers or documented standards. Flag references that cannot be resolved.

[RISK_CATEGORIES]

The risk dimensions to assess, overriding the default categories if needed

Security, Availability, Cost, Operational Complexity, Vendor Lock-in, Data Integrity

Optional. Defaults to standard categories if omitted. If provided, validate that each category is a distinct risk dimension. Reject categories that are synonyms or overlap completely.

[ACCEPTANCE_THRESHOLD]

The risk tolerance boundary for accepting the decision

No single risk above Medium without documented mitigation. No High risks without VP Engineering approval.

Optional. Defaults to standard organizational threshold if omitted. If provided, validate that the threshold uses defined severity levels and specifies approval escalation rules.

PROMPT PLAYBOOK

Implementation Harness Notes

How to wire the ADR Risk Assessment prompt into a reliable application or review workflow.

The ADR Risk Assessment prompt is designed to be called programmatically as part of an architecture review pipeline, not as a one-off chat interaction. The harness should treat this prompt as a structured risk extraction step that runs after an ADR draft exists but before final approval. The prompt expects a complete ADR document as [ADR_DOCUMENT] and an optional [SYSTEM_CONTEXT] describing the broader architecture, team constraints, or regulatory environment. The output is a JSON risk register with likelihood, impact, mitigation options, and acceptance rationale for each identified risk. The harness must validate this output before it reaches a reviewer or is stored in the ADR repository.

Validation and Schema Enforcement: The harness must validate the model's JSON output against a strict schema before accepting it. Required fields per risk entry include risk_id, description, category (from a controlled enum: security, reliability, performance, cost, operability, compliance, dependency, team_capability), likelihood (enum: low, medium, high, critical), impact (same enum), mitigation_options (array of strings, minimum one entry), and acceptance_rationale (string explaining why the residual risk is acceptable or must be escalated). If the model omits required fields, returns invalid enum values, or produces an empty risk register when the ADR describes a consequential decision, the harness should retry with a more explicit instruction appended to the prompt. After two failed retries, escalate to a human reviewer with the raw output and validation errors logged. Retry Logic: On validation failure, append a structured error message to the prompt context: The previous output failed validation. Missing fields: [list]. Invalid enum values: [list]. Please regenerate the complete risk register with all required fields. This error-feedback loop significantly improves recovery rates for schema violations.

Model Choice and Temperature: Use a model with strong structured output capabilities and low temperature (0.0–0.2) to minimize variance in risk identification. The risk assessment task benefits from deterministic behavior because reviewers need consistent outputs across multiple ADRs for comparability. If your platform supports structured output modes (e.g., function calling with a JSON schema parameter, or constrained decoding), prefer that over parsing free-text JSON from a chat completion. Human Review Gate: This prompt addresses high-stakes architectural decisions where missed risks can cause production incidents, data loss, or compliance failures. The harness must route every output through a human review step before the risk register is attached to the ADR. The review interface should display each risk with its mitigation options and allow the reviewer to accept, reject, reclassify, or add risks the model missed. Log all reviewer actions for auditability. Integration Points: Store validated risk registers alongside their source ADRs in your documentation repository with a traceable link. If your team uses an ADR management tool or static site generator, the harness should write the risk register as a supplementary file (e.g., adr-0042-risks.json) and update the ADR's status metadata to indicate risk assessment is complete. For CI/CD integration, treat a missing or empty risk register on a high-severity ADR as a pipeline warning, not a hard block, to avoid slowing urgent decisions while still flagging the gap.

What to avoid: Do not run this prompt on ADRs that document trivial or reversible decisions where the cost of risk assessment exceeds the cost of being wrong. Do not treat the model's likelihood and impact ratings as objective ground truth—they are starting points for human judgment. Do not skip the human review gate for decisions affecting security, data integrity, compliance, or system availability. The harness should classify ADRs by decision criticality (using metadata like impact_scope or regulatory_relevance) and only bypass human review for low-criticality decisions where the risk register is advisory. Finally, log every prompt invocation with the ADR version, model response, validation result, retry count, and reviewer actions. This trace data is essential for improving the prompt over time and for audit evidence when a risk that was assessed later materializes.

IMPLEMENTATION TABLE

Expected Output Contract

Defines the shape, types, and validation rules for the ADR Risk Assessment model response. Use this contract to build a parser, validator, or retry guard before the output enters downstream systems.

Field or ElementType or FormatRequiredValidation Rule

risk_register

Array of objects

Must be a non-empty array. If no risks are identified, return a single entry with risk_id 'NONE' and rationale explaining why.

risk_register[].risk_id

String (slug format)

Must match pattern ^[a-z0-9-]+$. Must be unique within the array.

risk_register[].risk_title

String (max 120 chars)

Must be a concise, descriptive label. Cannot be empty or whitespace-only.

risk_register[].likelihood

Enum: 'low', 'medium', 'high', 'critical'

Must be one of the four allowed values. Case-sensitive.

risk_register[].impact

Enum: 'low', 'medium', 'high', 'critical'

Must be one of the four allowed values. Case-sensitive.

risk_register[].mitigation_options

Array of strings (min 1)

Each string must be a concrete, actionable mitigation step. Empty array is invalid. Generic mitigations like 'monitor it' should be flagged for human review.

risk_register[].acceptance_rationale

String (max 500 chars)

Must explain why the residual risk is acceptable. Cannot be empty. Phrases like 'we accept this risk' without reasoning should fail validation.

risk_register[].source_evidence

Array of strings or null

If provided, each string must reference a specific document section, data point, or assumption. Null is allowed when evidence is unavailable, but the field must be present.

PRACTICAL GUARDRAILS

Common Failure Modes

Risk assessment prompts fail in predictable ways. Here are the most common failure modes when generating risk registers from architecture decisions, and how to guard against them.

01

Overconfidence in Mitigation Claims

What to watch: The model accepts stated mitigations at face value without probing their effectiveness. A mitigation like 'we'll add caching' appears in the risk register without questioning cache invalidation, cold start, or consistency trade-offs. Guardrail: Add a constraint requiring each mitigation to include a residual risk statement and a testable acceptance criterion. Prompt: 'For each mitigation, state what risk remains and how you would verify the mitigation works before release.'

02

Risk Omission from Narrow Framing

What to watch: The prompt only surfaces risks within the explicitly stated decision scope, missing cross-cutting concerns like observability gaps, team skill mismatches, or operational toil that the decision introduces. Guardrail: Include a mandatory pass that asks: 'List three risks that span beyond the immediate technical boundary of this decision, including operational, team, and downstream system impacts.' Validate that at least one non-functional risk appears in the output.

03

Likelihood and Impact Inflation

What to watch: Without calibrated scales, the model labels every risk as 'High' likelihood and 'High' impact, making the register useless for prioritization. Guardrail: Provide explicit ordinal scales in the prompt with concrete definitions. Example: 'Medium likelihood = expected to occur once per quarter under normal load. High impact = causes customer-facing outage exceeding 30 minutes.' Require a brief justification sentence for each rating.

04

Missing Acceptance Rationale

What to watch: The prompt generates a list of risks and mitigations but never captures why the team chose to accept certain residual risks. This creates an audit gap where accepted risks look like oversights. Guardrail: Add an explicit output field: 'Accepted Risk Rationale: Why are we proceeding despite this risk?' Require a non-empty entry for every risk marked as accepted rather than fully mitigated.

05

Status Quo Bias in Risk Comparison

What to watch: The model overestimates risks of the proposed change while underestimating risks of doing nothing. The 'do nothing' option appears deceptively safe because its existing incidents and operational burden are invisible to the prompt. Guardrail: Require a symmetrical risk assessment for the status quo option. Prompt: 'Before evaluating the proposed decision, list the top three risks of continuing with the current approach, including known incidents, scaling limits, and maintenance burden.'

06

Unstated Assumptions Masking Real Risk

What to watch: The risk register treats assumptions as facts. If the prompt assumes 'the new database will handle 10x current load' without surfacing that as a dependency, the real risk of load-test failure is invisible. Guardrail: Add a pre-output step: 'List all assumptions this risk assessment depends on. For each assumption, state what happens to the risk profile if the assumption proves false.' Validate that at least one assumption carries a material risk consequence.

IMPLEMENTATION TABLE

Evaluation Rubric

Use this rubric to evaluate ADR Risk Assessment outputs before shipping the prompt into production. Each criterion targets a known failure mode: omitted risks, inflated mitigation confidence, missing acceptance rationale, or vague impact estimates. Run these checks on a golden set of 5-10 architecture scenarios with known risk profiles.

CriterionPass StandardFailure SignalTest Method

Risk Register Completeness

Output identifies at least one risk per architectural dimension mentioned in [CONTEXT] (e.g., performance, security, operability, cost, team capability)

Output lists only obvious risks (e.g., 'system goes down') while ignoring domain-specific risks present in the input context

Diff extracted risk categories against a pre-annotated context; flag if coverage < 80% of known risk dimensions

Likelihood and Impact Specificity

Every risk entry includes a likelihood level (Low/Medium/High/Critical) and an impact level with a concrete consequence statement, not a generic label

Risk entries use only qualitative labels without describing what 'High impact' means for this specific system or stakeholder

Parse each risk object; fail if any entry has null or empty consequence_description field or uses only the label without elaboration

Mitigation Option Feasibility

Each mitigation option includes a feasibility note (e.g., team capability, cost, timeline, dependency) and does not assume perfect execution

Mitigation options read as generic best practices (e.g., 'add monitoring', 'use caching') without addressing the specific system constraints in [CONTEXT]

LLM-as-judge pairwise comparison: does the mitigation reference at least one concrete constraint from the input context? Score < 3/5 on specificity fails

Acceptance Rationale Presence

For risks marked as 'Accepted', the output includes an explicit rationale explaining why the risk is tolerated (cost, schedule, probability, strategic choice)

Accepted risks have no rationale or a circular justification (e.g., 'accepted because it is acceptable')

Regex check for acceptance_rationale field on all risks with status='accepted'; fail if field is empty, null, or < 20 characters

Overconfidence Detection

No mitigation option claims to eliminate a risk entirely; language acknowledges residual risk (e.g., 'reduces likelihood to Low', 'limits blast radius')

Output uses absolute language like 'eliminates', 'prevents', 'guarantees', or 'solves' when describing mitigation effectiveness

Keyword scan for absolute terms; flag any risk where mitigation_description contains 'eliminate', 'prevent', 'guarantee', 'solve', or 'ensure' without a qualifying residual risk statement

Risk Interdependency Acknowledgment

Output notes when mitigating one risk increases another (e.g., adding redundancy increases cost risk) or when risks compound

Risks are treated as independent items with no cross-reference or compounding note

Check for at least one cross-risk reference in the output when the context describes a system with >= 3 architectural concerns; absence is a fail

Output Schema Validity

Output parses as valid JSON matching the expected risk_register schema with all required fields present and correctly typed

Output is valid JSON but missing required fields (e.g., risk_id, likelihood, impact, mitigation_options) or uses wrong types (e.g., string for likelihood enum)

JSON Schema validation against the expected output contract; fail on any schema violation or missing required field

ADAPTATION OPTIONS

Adapt This Prompt

How to adapt

Use the base prompt with a frontier model (GPT-4o, Claude 3.5 Sonnet) and minimal validation. Accept the raw risk register output for manual review. Skip schema enforcement and focus on getting useful risk categories and mitigation ideas quickly.

  • Remove the strict [OUTPUT_SCHEMA] constraint and ask for a markdown table instead.
  • Replace [CONSTRAINTS] with a single sentence: "List risks with likelihood, impact, and one mitigation each."
  • Run against a single ADR draft and iterate verbally with the architect.

Watch for

  • Overconfident likelihood estimates without evidence
  • Missing systemic or cross-cutting risks
  • Mitigation suggestions that are generic rather than architecture-specific
  • The model inventing risks not present in the ADR context
Prasad Kumkar

About the author

Prasad Kumkar

CEO & MD, Inference Systems

Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.

His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.