BXUP Track progress & test yourself — free
Data Engineering · Playbook · Core · ~4 min read
DATA ENGINEERING · PLAYBOOK · CORE

Triage a Data Incident with AI: Root Cause, Comms, and Monitor Tuning

A freshness alert fires, a volume check fails, a dashboard number looks wrong. The slow parts of what follows — correlating lineage with recent changes, forming hypotheses, writing the consumer note nobody wants to write at 2 a.m. — are exactly where an LLM compresses hours into minutes, provided it proposes and you confirm.

This playbook runs one incident end to end: AI-ranked hypotheses with confirming queries, human-verified root cause, drafted communications, and the post-incident monitor tuning that stops the same alert from crying wolf.

When to reach for this

Use this the moment a data-quality alert or consumer report lands and the cause is not already obvious. It assumes you can pull lineage for the affected asset and a list of recent changes (deploys, DAG runs, upstream loads).

Triggers:

  • Anomaly alert (freshness, volume, distribution) on a production table.
  • A stakeholder reports numbers that "look wrong" downstream.
  • Post-incident: the alert that caught this (or failed to) needs tuning.

The workflow

  1. Assemble the evidence pack — mechanically, not selectively. Alert details (metric, expected vs observed, when it started), upstream lineage two hops back, last 72 hours of changes (merged PRs, DAG run outcomes, upstream job timings, schema changes), and one query's worth of the symptom. Resist forming a theory while collecting; a pre-formed theory shapes the pack and blinds the model the same way it blinds you.

  2. Ask for ranked hypotheses with disconfirming queries.

    Data incident. Evidence below: alert, lineage, recent changes, symptom.
    
    Produce a ranked list of root-cause hypotheses. For each:
    - mechanism: the causal chain from trigger to observed symptom
    - which evidence supports it and which evidence argues against it
    - one cheap SQL query that would CONFIRM or ELIMINATE it (DuckDB/ANSI)
    - what else would be broken right now if this hypothesis were true.
    Rank by likelihood x cheapness-to-test. Do not commit to one cause;
    include one "outside the evidence pack" hypothesis.
    
    [paste evidence pack]
    

    The "what else would be broken" line is the quiet workhorse — it turns each hypothesis into extra checkable predictions.

  3. Run the queries top-down and verify inline. Execute each hypothesis's test before reading the next explanation. Typical shape:

    -- H1: upstream orders load ran but loaded partial data
    SELECT CAST(loaded_at AS DATE) AS load_date, COUNT(*) AS rows_loaded
    FROM raw_orders
    WHERE loaded_at >= CURRENT_DATE - INTERVAL 7 DAY
    GROUP BY 1 ORDER BY 1;
    

    Paste results back — eliminations matter as much as confirmations, and the model re-ranks usefully when told "H1 eliminated, counts normal." Stop when one hypothesis is confirmed by its query and its side-predictions check out.

  4. Confirm blast radius from lineage, then draft the comms. Two artifacts, two audiences, one prompt each:

    Draft a consumer-facing incident note from the confirmed facts below.
    Audience: analysts and dashboard owners. Include: what is affected
    (tables/dashboards), the impact window, what is NOT affected, current
    status, next update time. Under 150 words, no speculation, no jargon,
    no root-cause detail beyond one plain sentence.
    Facts: [confirmed cause, affected assets from lineage, timeline]
    

    Fact-check every sentence against your confirmed evidence before sending — you own the accuracy, the model owns the typing. After resolution, same pattern for the blameless postmortem: paste the timeline and confirmed cause, require a contributing-factors section and concrete action items, and strip anything that names-and-blames.

  5. Close the loop on the monitor itself. Every incident says something about your alerting: this alert fired late, fired for the wrong reason, or a noisy neighbor had trained everyone to ignore the channel. Feed alert history to the assistant:

    Below: 90 days of alert history for this pipeline's monitors (monitor,
    fired_at, resolved_as: real/noise/unknown). Classify each monitor:
    KEEP (catches real issues), TUNE (propose a threshold or seasonality
    adjustment, with reasoning from the history), or RETIRE (noise only).
    For TUNE proposals, show what the last 90 days would have looked like
    under the new threshold: how many real incidents kept, how many false
    alarms removed.
    

    Replay-based proposals ("under the new threshold: 9 of 9 real incidents kept, 31 of 34 false alarms removed") are reviewable; vibes-based threshold changes are not. Apply tuning as a reviewed PR, and note it in the postmortem.

Warning

An LLM will produce a fluent, confident root-cause narrative from thin evidence — that fluency is the hazard. Nothing in the incident record, and nothing sent to consumers, rests on an unexecuted query.

Verify before you trust it

  • The accepted root cause is confirmed by its designated query AND at least one side-prediction ("what else would be broken") checked true.
  • At least the top two competing hypotheses were explicitly eliminated by query results, not by narrative preference.
  • Blast radius in the consumer note matches lineage output exactly — every named asset verified affected, and one downstream asset verified clean to bound the impact.
  • Comms fact-check: each factual sentence traces to executed evidence; the "what is NOT affected" claim was actually tested.
  • Monitor-tuning replay: proposed thresholds re-scored against full history; zero real incidents lost.

Pitfalls

  • Anchoring on hypothesis #1. The model's top pick is a prior, not a finding — and it inherits whatever framing your evidence pack implied. Running the disconfirming queries in order is the discipline that protects you.
  • Evidence pack curated by theory. If you already suspect the deploy, you will include deploy logs and omit the upstream vendor delay. Mechanical collection (same pack contents every incident) beats judgment here.
  • Comms drift into speculation. Drafts love "likely caused by" before confirmation and optimistic ETAs always. The facts-only prompt plus sentence-level fact-check keeps the note something you will not retract.
  • Fixing the symptom, skipping the monitor. The alert that fired 9 hours late gets no attention once data is fixed — until next time. Step 5 is part of the incident, not optional hygiene.
  • Tuning monitors by deletion. "This alert is noisy" too often becomes "this alert is gone," discovered during the next real incident. RETIRE requires the same replay evidence as TUNE.

Tools

  • Monte Carloembeds this pattern natively (lineage-aware root-cause analysis, incident agents); the reference point for what managed tooling does out of the box.
  • Claude / frontier LLM over your own lineage + logsthe DIY version above; works with dbt lineage, Airflow logs, and warehouse query history you already have.
  • ElementaryOSS, dbt-native observability that supplies the alert history and test results the tuning step consumes; the free-path default alongside a chat assistant.

Client-safe variant

Incident evidence packs contain schema names, row counts, and occasionally sample rows — treat them at the same sensitivity as the data. On client work, run triage through Bedrock/Azure OpenAI in the client's tenancy (most client incident processes already require in-boundary tooling), or a local Ollama model for the hypothesis and drafting steps. Strip sample rows down to shapes ("amount column, 4% of rows now NULL, previously 0%") before prompting, keep all confirming queries inside the client warehouse, and route consumer comms through the client's own incident channels — the drafted note is input to their process, never sent by you or by any tool on their behalf.

This is the free reading view. Open BXUP to track your progress, run the hands-on labs, and prove it with original, exam-pattern assessments.
© Anvi Innovate · BXUP — Be Exponentially Upskilled · BXUP is an independent learning platform, not affiliated with or endorsed by AWS, Microsoft, Google, NVIDIA, IBM, Salesforce, Databricks, Oracle or Anthropic. All trademarks belong to their respective owners. · bxup.in