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.
Prompt
ADR Risk Assessment Prompt

When to Use This Prompt
Defines the precise job-to-be-done, the required inputs, and the boundaries for the ADR Risk Assessment Prompt.
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.
Use Case Fit
Where the ADR Risk Assessment Prompt works, where it fails, and the operational conditions required for reliable use.
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.
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.
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.
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.
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.
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.
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.
textYou 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.
Prompt Variables
Each placeholder the ADR Risk Assessment Prompt needs to work reliably, with validation notes for production harness integration.
| Placeholder | Purpose | Example | Validation 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 |
| 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. |
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.
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 Element | Type or Format | Required | Validation 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. |
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.
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.'
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.
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.
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.
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.'
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.
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.
| Criterion | Pass Standard | Failure Signal | Test 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 |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
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

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.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us