Use this prompt when you have a confirmed or strongly suspected race condition that caused a production incident, and you need to reconstruct the specific interleaving of concurrent operations that led to the failure. This playbook is designed for backend engineers, SREs, and on-call responders who have access to concrete concurrency evidence from the incident window: concurrent operation logs with timestamps, transaction traces showing interleaved execution, lock acquisition and release records, and data state snapshots before, during, and after the race window. The prompt turns chaotic concurrency evidence into a precise race window description, a root cause hypothesis grounded in the actual execution order, and code-level fix guidance that addresses the specific interleaving pattern rather than generic thread-safety advice.
Prompt
Race Condition Root Cause Analysis Prompt

When to Use This Prompt
Understand the ideal conditions, required inputs, and critical limitations for using the race condition root cause analysis prompt.
The prompt requires structured input to produce reliable output. You must provide: a description of the concurrent operations involved (e.g., two goroutines, parallel database transactions, async event handlers), the observed failure symptom (e.g., duplicate record, lost update, stale read, inconsistent state), and the raw evidence from the incident window. This evidence should include timestamped operation logs showing entry and exit points, lock acquisition and release records with holder identity, transaction begin and commit timestamps, and data state snapshots that reveal the corrupted or inconsistent state. Without this concrete concurrency data, the model will generate plausible but ungrounded hypotheses that waste investigation time. The output requires human review before any production code change because race condition fixes can introduce new concurrency bugs, deadlocks, or performance regressions if applied without careful analysis of all affected code paths.
Do not use this prompt when you lack concrete concurrency data from the incident window. If you only have error messages, stack traces, or user reports without the underlying operation interleaving evidence, start with the Incident Timeline Extraction Prompt or Log Anomaly Pattern Extraction Prompt to gather the necessary data first. Do not use this prompt when the failure is clearly single-threaded, when the incident is caused by a simple null pointer or configuration error, or when you are doing pre-merge code review without a production incident to ground the analysis. For pre-merge concurrency review, use the Concurrency and Race Condition Review Prompts instead. This prompt is specifically designed for post-incident root cause analysis where the race condition has already manifested in production and you need to understand exactly how it happened to prevent recurrence.
Use Case Fit
Where this prompt works and where it does not. Understand the operational boundaries before wiring it into an incident response workflow.
Good Fit: Post-Incident Deep Dives
Use when: you have a completed incident with collected logs, transaction traces, and deployment records. The prompt excels at reconstructing the interleaving of concurrent operations to find the specific race window. Guardrail: ensure the input data includes timestamps with at least millisecond precision and lock acquisition/release events.
Bad Fit: Live Incident Triage
Avoid when: the incident is still active and you need immediate mitigation. This prompt is designed for post-hoc analysis, not real-time decision-making under pressure. Guardrail: use the sibling 'Remediation Candidate Ranking Prompt' for active incidents and reserve this prompt for the postmortem phase.
Required Inputs
What to watch: the prompt requires structured concurrency data—transaction logs with thread IDs, lock wait events, and data state transitions. Incomplete or unstructured logs will produce speculative results. Guardrail: validate that your input includes concurrent operation traces, not just sequential error logs, before invoking the prompt.
Operational Risk: False Certainty
What to watch: the model may present a single interleaving as the definitive root cause when multiple race windows existed. This creates a risk of fixing one symptom while leaving the underlying concurrency design flaw. Guardrail: always require the output to list alternative interleavings and their probability, and have a senior engineer review the proposed fix for general correctness.
Operational Risk: Missing Context
What to watch: the prompt cannot reason about concurrency primitives or invariants that are not present in the provided logs or code context. It may miss a race condition caused by an external system or a misconfigured connection pool. Guardrail: supplement the prompt with relevant code snippets for the critical section and explicitly list any external state dependencies.
Copy-Ready Prompt Template
A copy-ready prompt template for analyzing race condition incidents, with placeholders for your specific logs, metrics, and system context.
The following prompt template is designed to be pasted directly into your AI harness. It accepts structured evidence from your incident investigation—including concurrent operation logs, lock acquisition patterns, and data state transitions—and outputs a specific interleaving hypothesis with code-level fix guidance. Replace every square-bracket placeholder with real data from your incident before execution. Do not leave any placeholder unresolved; if a piece of evidence is unavailable, explicitly note its absence in the input rather than omitting the field.
codeSYSTEM: You are a senior backend engineer specializing in distributed systems and concurrency debugging. Your task is to analyze incident evidence and produce a structured root cause analysis for a race condition. You must identify the specific interleaving of concurrent operations that caused the failure, explain why the existing synchronization was insufficient, and propose code-level remediation. Do not speculate beyond the provided evidence. If the evidence is insufficient to isolate a single root cause, enumerate the plausible hypotheses ranked by likelihood with the additional evidence needed to confirm each. USER: [INCIDENT_SUMMARY] [CONCURRENT_OPERATION_LOGS] [LOCK_ACQUISITION_PATTERNS] [DATA_STATE_TRANSITIONS] [TRANSACTION_BOUNDARIES] [SYSTEM_ARCHITECTURE_CONTEXT] [EXPECTED_VS_ACTUAL_OUTCOME] [OUTPUT_SCHEMA] [CONSTRAINTS] [RISK_LEVEL]
Placeholder Definitions:
-
[INCIDENT_SUMMARY]: A concise description of the observed failure, including the affected service, the symptoms (e.g., incorrect data, duplicate writes, stale reads), and the time window of the incident. Example: "Payment service recorded duplicate charges for 3% of transactions between 14:22 and 14:31 UTC. Each affected transaction shows two successful charge records with identical idempotency keys."
-
[CONCURRENT_OPERATION_LOGS]: Timestamped log entries for all operations that executed concurrently during the incident window. Include thread or process IDs, operation types (read, write, update, delete), and the specific data entities accessed. Format as a chronologically ordered list or table.
-
[LOCK_ACQUISITION_PATTERNS]: Records of lock acquisition attempts, including lock type (pessimistic, optimistic, distributed), lock scope (row, table, key, resource), acquisition timestamps, hold durations, and any timeout or contention events. Include both successful and failed acquisition attempts.
-
[DATA_STATE_TRANSITIONS]: The sequence of state changes for the affected data entities, including the value before and after each operation, the operation that caused the transition, and the timestamp. If using event sourcing or change data capture, include the relevant event records.
-
[TRANSACTION_BOUNDARIES]: The start and commit/rollback timestamps for each database transaction involved, along with the isolation level used (e.g., READ COMMITTED, REPEATABLE READ, SERIALIZABLE). Note any transactions that spanned multiple service calls or external API invocations.
-
[SYSTEM_ARCHITECTURE_CONTEXT]: A brief description of the relevant system components, including the number of service instances, the database technology and version, any caching layers, message queues, or external services involved in the concurrent operations.
-
[EXPECTED_VS_ACTUAL_OUTCOME]: A clear statement of what the system should have produced versus what it actually produced. Example: "Expected: exactly one charge record per idempotency key. Actual: two charge records with the same idempotency key, both marked as successful."
-
[OUTPUT_SCHEMA]: The desired output structure. Recommended schema:
json{ "root_cause_hypothesis": { "interleaving_description": "string", "race_window": "string", "vulnerable_code_path": "string", "synchronization_gap": "string", "confidence": "high|medium|low" }, "contributing_factors": ["string"], "code_level_fix": { "approach": "string", "specific_change": "string", "risk_of_regression": "string" }, "alternative_hypotheses": [], "evidence_gaps": ["string"] } -
[CONSTRAINTS]: Any specific requirements for the analysis. Example: "Do not propose database-level serializable isolation as a fix unless no application-level synchronization is feasible. Prefer solutions that minimize contention and preserve throughput. Flag any fix that requires a data migration."
-
[RISK_LEVEL]: The severity classification of the incident. Use "critical" for data corruption or financial impact, "high" for user-facing incorrect behavior without data loss, "medium" for performance degradation, or "low" for cosmetic issues. This field influences the depth of analysis and the urgency of the remediation recommendation.
Adaptation Guidance: This template assumes you have structured log data available. If your incident evidence is primarily in unstructured form (chat transcripts, manual observations), run the Incident Timeline Extraction Prompt first to produce normalized event logs, then feed that output into this template. For high-severity incidents where the race condition caused data corruption, always include a human review step before applying any code-level fix. The model's proposed interleaving is a hypothesis—validate it against database audit logs or by reproducing the race window in a staging environment before merging remediation code.
Prompt Variables
Each placeholder the Race Condition Root Cause Analysis prompt requires to produce a reliable, testable root cause hypothesis. Validate these inputs before calling the model to prevent garbage-in, garbage-out analysis.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[INCIDENT_TIMELINE] | Ordered sequence of events, log entries, and state changes during the incident window | T1: Thread A acquires lock on user_123. T2: Thread B reads balance=100. T3: Thread A writes balance=50. T4: Thread B writes balance=80. | Must contain at least 4 timestamped events with actor, action, and target. Reject if events are unordered or missing timestamps. |
[CONCURRENT_ACTORS] | List of threads, processes, transactions, or services operating concurrently during the incident | Thread-A (write transaction), Thread-B (read-modify-write transaction), CronJob-Cleanup (scheduled task) | Must include at least 2 actors. Each actor requires an identifier and operation type. Null allowed if actors are inferred from timeline. |
[SHARED_RESOURCE] | The data structure, database row, file, or state that was accessed concurrently | user_accounts.balance column for user_id=123, with isolation level READ_COMMITTED | Must specify the resource path and isolation or locking semantics. Reject if resource is ambiguous or unnamed. |
[LOCKING_MECHANISM] | Description of locks, mutexes, semaphores, or transaction isolation levels in use | PostgreSQL row-level lock via SELECT FOR UPDATE, application-level distributed lock in Redis with TTL=30s | Must describe the mechanism and its scope. Use 'none' if no locking exists. Validate that mechanism matches the stack described in [SYSTEM_CONTEXT]. |
[SYSTEM_CONTEXT] | Relevant architecture details: language, framework, database, and concurrency model | Java 17, Spring Boot 3.2, PostgreSQL 15, connection pool HikariCP max=20, async processing via CompletableFuture | Must include language, database, and concurrency primitives. Reject if missing database or concurrency model. Used to ground code-level fix guidance. |
[OBSERVED_SYMPTOM] | The specific incorrect outcome, data corruption, or failure observed | User balance overwritten: expected final balance 30, observed final balance 80. Lost update from Thread A. | Must describe the expected vs actual state. Reject if symptom is vague ('something broke'). Symptom must be falsifiable. |
[DEPLOYMENT_CONTEXT] | Recent code changes, config updates, or infrastructure modifications near the incident window | Deployed commit abc1234 10 minutes before incident: refactored balance update from transactional to async CompletableFuture | Must include change description and timing relative to incident. Use 'no recent changes' if none. Validate against deployment log if available. |
[CONSTRAINTS] | Boundaries for the analysis: scope limits, excluded hypotheses, or required output format | Focus on application-layer race conditions only. Exclude database deadlock scenarios. Output must include specific code interleaving diagram. | Must list explicit inclusions and exclusions. Reject if constraints are empty. Use to prevent scope creep in analysis. |
Implementation Harness Notes
How to wire the Race Condition Root Cause Analysis prompt into an incident response or postmortem workflow with validation, retries, and human review.
This prompt is designed to be a component within a larger incident analysis pipeline, not a standalone chat interaction. It should be triggered automatically when an incident is declared with a cause:race_condition tag or when a postmortem draft identifies concurrency as a suspected factor. The harness must gather the required inputs—concurrent operation logs, transaction ordering data, lock acquisition records, and data state transitions—from your observability stack (e.g., Datadog, Grafana, Jaeger) and format them into the [INPUT_CONTEXT] block before calling the model. The prompt's output is a structured JSON object containing the specific interleaving hypothesis and code-level fix guidance, which your system should parse and inject directly into the incident document or postmortem draft.
Validation and Retries: The harness must validate the model's output against the [OUTPUT_SCHEMA] defined in the prompt template. A strict JSON schema validator should check for the presence of required fields: race_window, interleaving_sequence, affected_resources, and fix_guidance. If validation fails, implement a single retry with the error message appended to the prompt as [PREVIOUS_OUTPUT_ERROR]. If the retry also fails, the harness should log the failure, flag the incident for manual root cause analysis by an on-call engineer, and attach the raw model output for debugging. Do not silently accept malformed output in a high-risk incident context.
Model Choice and Tool Use: For this analytical task, prefer a model with strong reasoning capabilities and a large context window (e.g., Claude 3.5 Sonnet, GPT-4o) to handle verbose log data. The prompt does not require external tools or RAG during execution because all evidence should be pre-fetched and included in the prompt context. However, the harness should provide a [TOOLS] block with a read_incident_timeline function if the model needs to request additional data, though this is optional for most implementations. Human Review Gate: The harness must route the final, validated output to a human reviewer (the incident commander or postmortem owner) for approval before the analysis is published in the official postmortem. The review UI should display the model's interleaving hypothesis alongside the raw evidence it cited, allowing the engineer to confirm or reject the analysis. This is critical because an incorrect root cause can misdirect remediation efforts and erode trust in the incident review process.
Expected Output Contract
Defines the required structure, types, and validation rules for the race condition root cause analysis output. Use this contract to parse, validate, and store the model response before surfacing it in an incident review tool.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
race_window | Object | Must contain start_timestamp and end_timestamp as ISO 8601 strings. start_timestamp must be before end_timestamp. | |
race_window.start_timestamp | ISO 8601 String | Parseable as a valid datetime. Must be before end_timestamp. Must fall within the provided incident timeline bounds. | |
race_window.end_timestamp | ISO 8601 String | Parseable as a valid datetime. Must be after start_timestamp. Must fall within the provided incident timeline bounds. | |
interleaving_sequence | Array of Objects | Array must contain at least 2 operations. Each object must include operation_id, actor, timestamp, and action fields. Timestamps must be monotonically increasing. | |
interleaving_sequence[].operation_id | String | Must match a valid operation ID from the provided [LOG_ENTRIES] or be a generated unique identifier if synthesized. Non-empty. | |
interleaving_sequence[].actor | String | Must identify the concurrent entity (e.g., thread name, request ID, process ID). Must match an actor present in the provided [SYSTEM_CONTEXT]. | |
interleaving_sequence[].action | String | Must describe the specific operation (e.g., 'acquired lock on user_123', 'read balance as 100', 'committed transaction'). Non-empty. | |
root_cause_hypothesis | String | Must describe the specific interleaving that caused the failure. Must reference at least two operations from interleaving_sequence. Length between 50 and 500 characters. | |
contributing_factors | Array of Strings | Must contain at least 1 factor. Each string must be non-empty and between 10 and 200 characters. Must not duplicate the root_cause_hypothesis. | |
code_fix_guidance | Object | Must contain file_path, fix_strategy, and code_snippet fields. file_path must be a non-empty string. fix_strategy must be one of the allowed enum values. | |
code_fix_guidance.fix_strategy | Enum String | Must be one of: 'add_locking', 'atomic_operation', 'transaction_isolation', 'retry_with_backoff', 'idempotency_key', 'compare_and_swap', 'queue_serialization'. | |
code_fix_guidance.code_snippet | String | Must be a non-empty string containing a code diff or block. Must include language hint if multi-line. Length between 20 and 2000 characters. | |
confidence_score | Number | Must be a float between 0.0 and 1.0 inclusive. Values below 0.7 should trigger a human review flag in the consuming application. | |
evidence_links | Array of Strings | Must contain at least 1 reference to a log line ID, metric label, or trace span ID from the provided [EVIDENCE_SOURCES]. Each string must be non-empty. |
Common Failure Modes
Race condition analysis prompts fail in predictable ways. Here are the most common failure modes and how to guard against them before you trust the output in a postmortem or remediation plan.
Hallucinated Interleavings
What to watch: The model invents a specific sequence of concurrent operations that never occurred, especially when log timestamps are coarse or missing. It fills gaps with plausible but fictional event orderings. Guardrail: Require the prompt to cite exact log line IDs or timestamps for every step in the proposed interleaving. Add a post-processing check that rejects any interleaving step without a source reference.
Single-Threaded Reasoning Bias
What to watch: The model defaults to sequential reasoning and fails to identify true concurrent execution. It describes operations as happening one after another when they actually overlapped, missing the race window entirely. Guardrail: Explicitly instruct the model to draw a concurrency timeline with overlapping execution bars before proposing a root cause. Validate that the output contains at least two operations with overlapping time ranges.
Lock Analysis Oversimplification
What to watch: The model assumes lock acquisition order is always consistent or fails to identify missing locks. It may propose a fix that introduces deadlocks or ignores lock contention as a contributing factor. Guardrail: Require the prompt to enumerate all lock acquisition points, held durations, and release order. Add a validation step that checks the proposed fix against a deadlock detection checklist before accepting it.
Transaction Boundary Blindness
What to watch: The model treats database operations as atomic when they span multiple statements without explicit transaction boundaries. It misses isolation level gaps, partial commits, or read skew that created the race window. Guardrail: Include the database isolation level and transaction demarcation in the required input context. Instruct the model to explicitly state transaction boundaries and isolation guarantees for each operation in its analysis.
Fix Suggestion Without Impact Analysis
What to watch: The model confidently proposes a code fix (e.g., adding a mutex, changing isolation level) without analyzing the performance impact, deadlock risk, or correctness under load. The fix may solve the race but break throughput or introduce new concurrency bugs. Guardrail: Add a required output section for 'Fix Impact Analysis' that covers performance, deadlock potential, and regression risk. Flag any fix that lacks this section for human review before implementation.
Ignoring Clock Skew and Timestamp Drift
What to watch: The model treats distributed system timestamps as perfectly synchronized. It orders events incorrectly because it doesn't account for clock skew between nodes, leading to a wrong interleaving hypothesis. Guardrail: Require the prompt to note timestamp sources and warn about ordering uncertainty when events come from different machines. If clock skew bounds are unknown, the output must flag low-confidence ordering and avoid definitive sequencing claims.
Evaluation Rubric
Use this rubric to test the quality of the race condition root cause analysis output before shipping the prompt to production. Each criterion targets a specific failure mode common in concurrency analysis.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Interleaving Specificity | Output describes the exact sequence of operations across threads/transactions that caused the race, including timestamps or relative ordering. | Output only mentions general concurrency risk or uses vague phrases like 'a race condition occurred' without specifying the interleaving. | Manual review: check if a developer could reproduce the race from the description alone. |
Race Window Identification | Output identifies the specific code region or time interval where the race window was open, including the start and end conditions. | Output fails to bound the race window or describes it as 'the entire function' without narrowing to the critical section. | Schema check: verify [RACE_WINDOW] field is present and contains both start and end conditions. |
Data State Transition Trace | Output traces the data state before, during, and after the race, showing the intermediate state that caused the incorrect outcome. | Output only describes the final incorrect state without reconstructing the intermediate state that enabled the failure. | Assertion test: confirm [DATA_STATE_TRACE] contains at least three state snapshots with transition triggers. |
Lock Acquisition Pattern Analysis | Output identifies which locks were held, released, or missing, and maps the lock ordering to the deadlock or race condition. | Output mentions 'locking issue' without specifying lock types, acquisition order, or contention points. | Schema check: verify [LOCK_ANALYSIS] field includes lock names, acquisition order, and contention point. |
Code-Level Fix Guidance | Output proposes a specific code change with the synchronization primitive, placement, and rationale, not a generic recommendation. | Output suggests 'add locking' or 'use synchronized' without specifying where, what type, or how it closes the race window. | Manual review: check if a developer could implement the fix without additional research. |
Evidence Grounding | Every claim about operation ordering, lock state, or data transition is backed by a specific log line, metric, or event from [INPUT_CONTEXT]. | Output makes assertions about timing or state without citing source evidence or uses hallucinated log entries. | Citation check: verify each causal claim has a corresponding reference to [INPUT_CONTEXT] evidence. |
Alternative Hypothesis Exclusion | Output explains why at least one plausible alternative root cause was considered and excluded based on evidence. | Output presents a single root cause without considering or excluding other concurrency patterns that could produce similar symptoms. | Manual review: check for presence of excluded alternative with evidence-based reasoning. |
Remediation Precondition Check | Output identifies any preconditions required before the fix can be safely applied, such as data cleanup, migration, or dependent service changes. | Output recommends a fix without noting deployment risks, data inconsistency cleanup, or backward compatibility concerns. | Schema check: verify [REMEDIATION_PRECONDITIONS] field is non-empty and includes at least one operational prerequisite. |
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
Wrap the base prompt in a retrieval pipeline that pulls structured log entries, transaction traces, and lock acquisition events from your observability platform. Add a strict JSON output schema with fields for race_window_start, race_window_end, interleaving_sequence, root_cause_operation, and confidence. Include a validator that checks timestamp ordering, operation uniqueness, and lock-release-before-acquire invariants. Add retry logic with escalating context windows if the first pass is low confidence.
Watch for
- Silent format drift when the model adds commentary outside the schema
- Clock skew between services producing misleading interleaving order
- High token usage from verbose traces; consider pre-filtering to the incident window plus a 60-second buffer

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