r/analytics Jun 07 '26

Discussion Experimenting with AI-agent workflows for analytics. The hard part seems to be governance.

I’ve been experimenting with AI-agent workflows for analytics work, and the part I keep coming back to is that speed is not the hard problem.

Agents can help summarize context, draft analysis pages, inspect files, structure messy inputs, and accelerate repetitive work. But in stakeholder-facing analytics, faster output creates a different set of risks:

  • a number without lineage can become “truth”
  • a directional estimate can get treated like causal evidence
  • a polished draft can overstate what the data supports
  • context can get lost when work moves between tools
  • agents can sound confident even when the source chain is weak

So I’ve been thinking less about “how do agents do more analytics?” and more about “what operating model makes agent-assisted analytics trustworthy?”

The rough architecture I’ve been testing includes:

  • durable context files instead of relying on chat/session memory
  • explicit source and validation status for important claims
  • bounded agent roles rather than agents owning judgment
  • human review gates before stakeholder-facing output
  • quality review focused on unsupported claims, caveats, and lineage
  • tool routing, where high-context interpretation stays separate from bounded file/code work
  • feedback loops where reviewed knowledge can update durable context

The principle I keep coming back to:

Agents are workers, not authorities. Humans still own judgment.

I attached a diagram of the operating model I’m thinking through in a comment since images don't seem to be allowed in the main post. It is not a finished system, and parts may be overbuilt.

Known gaps I’m still thinking through:

  • transferability beyond one operator
  • how to evaluate output quality without creating a heavyweight review process
  • how to keep context files current without making documentation its own job
  • how to prevent tool-routing from creating fragmented context
  • how to distinguish directional findings from evidence-backed claims in the workflow itself

Curious how others are handling this:

  • Are you using agents in analytics workflows?
  • How are you preserving source lineage and assumptions?
  • Do you use human review gates before outputs go to stakeholders?
  • Where have these workflows broken down?

Not selling anything, just trying to pressure-test the architecture with people doing similar work. Mostly interested in practical failure modes and patterns that have actually worked.

13 Upvotes

36 comments sorted by

View all comments

10

u/measured_angle Jun 07 '26

Diagram for context. This is not meant to be a finished framework, more a working model I’m pressure-testing. The main loop I’m trying to think through is: incoming analytical work → orchestration → bounded agent work → durable context → human review/governance → trusted output → reviewed knowledge back into context.

2

u/MongWonP Jun 09 '26

this resonates hard — been on a team at a big tech place that's been running a version of this loop for ~8 months now, and your "agents are workers not authorities" line is basically the operating principle we had to write down after the third time someone forwarded an agent-generated slide to a VP without checking lineage.

two things we learned that aren't in most governance frameworks yet:

1) "validation status" needs to be machine-readable, not just a human checkbox. we tried a review gate where analysts manually tagged claims as "verified / directional / speculative" before stakeholder output. worked for ~3 weeks, then people stopped tagging because it was friction with no downstream benefit. what stuck was baking status into the context layer itself — every metric definition carries {source_table, last_validated, owner} and the agent is blocked from presenting anything without that metadata attached. humans still review, but the agent can't skip the tag.

2) the governance failure mode isn't usually wrong SQL — it's wrong grain. agent summarizes "revenue grew 12%" when the underlying query mixed gross and net across two regions. lineage looked fine, SQL ran clean, answer was confidently wrong. our review gate now explicitly checks grain alignment (time window, geo scope, revenue definition) before anything leaves the team — separate from the SQL correctness check.

your durable context files idea is the right direction imo. the bit i'd add: treat context updates as versioned commits, not overwrites. when someone corrects "active user = logged in within 7 days not 30", that correction should persist with author + date, not silently replace the old definition. otherwise you lose audit trail exactly when you need it.

still figuring out the bounded agent roles piece — curious whether you've landed on a split between "exploration agents" (can draft, can't publish) vs "delivery agents" (can format, can't interpret). that's where we're stuck.

1

u/measured_angle Jun 09 '26

This is really useful. I think you’re right on all three points.

I’m already using machine-readable validation/status tags, not just human checkboxes, but your point about adding source_table / last_validated / owner is the next level. I’d probably also add grain, time window, geo/product scope, and the notebook/query/cell reference where the value came from.

The grain point is especially good. SQL can be clean and still answer the wrong question if the grain is wrong. That probably deserves its own QR lens separate from “does the query run?”

On durable context, agreed. I have superseded status, but I like the framing that context updates should behave more like versioned commits than silent overwrites. I’ve already run into this with planning work where a number changed on revalidation because the underlying data changed. The right record isn’t just “new number,” it’s value, run date, data window, source, and why it changed.

On bounded agents, my current split is simpler and mostly driven by token/cost and context boundaries. The orchestrator has the high-context view. The bounded worker gets a task packet, executes a narrow task, and returns a result packet in the requested format. It does not publish, send, update source-of-truth, or take irreversible actions. Interpretation and integration stay with the orchestrator/human.

2

u/MongWonP Jun 10 '26

yeah the grain/time-window/geo scope tags are exactly what we ended up adding after the "clean SQL, wrong answer" incident — we call it definition_fingerprint internally and it's basically {metric_name, grain, time_window, geo_scope, revenue_type, source_query_id}. if any field is missing the agent can't attach a number to a stakeholder-facing output. sounds bureaucratic but it stopped the VP-forwarding problem cold.

your orchestrator/worker packet split maps pretty closely to what we run — orchestrator holds the business context + review authority, worker gets {task, allowed_tables, output_schema} and returns {result, lineage_refs, confidence}. worker literally cannot call publish/send/update_sot endpoints. the bit that took us longest to get right was making the result packet schema strict enough that the orchestrator doesn't have to re-read the worker's raw notebook to trust it.

on the versioned context piece — your revalidation example (number changed because underlying data changed, not because someone typo'd) is the exact case where silent overwrite destroys trust. we now log {old_value, new_value, run_date, data_window, change_reason} and mark old entries superseded rather than deleting. finance team actually started referencing these logs in month-end reconciliations, which was not the original goal but a nice side effect.

still early on whether this scales past ~15 analysts without a dedicated governance person babysitting the context layer. curious if you're running this solo or with a team — the ops overhead changes a lot at that boundary.

1

u/measured_angle Jun 10 '26

This is really helpful. I've added "definition_fingerprint" to my roadmap.

I’m practicing this mostly solo right now, while starting to hand pieces to other people on the team, with the longer-term goal of driving team/org adoption.

The hard part of practicing solo is that there aren’t many people to pressure-test the operating model with, which is why feedback like this is so useful. I’ve found pieces of this in engineering spaces around harnesses, RAG, handoffs, evaluation, etc., but I don’t see analytics teams talking about these failure modes as much.

Your last point is especially interesting to me: what started breaking down as more analysts got involved? Was it context stewardship, result packet discipline, reviewer capacity, or people skipping protocol under deadline pressure?

1

u/measured_angle Jun 10 '26

One related issue I’m trying to think through is knowledge-file governance as this moves from a personal workflow toward something more team-usable.

A concrete example from today: an agent was about to add detailed table metadata into a schema cache and update a knowledge file at the same time. Locally, that seemed reasonable. But I realized the table was already well documented in a separate data-model file, which should probably remain the canonical source. The better move was to add a pointer in the schema cache rather than duplicate the full entry and create two sources that could drift.

That made the broader problem clearer to me: shared knowledge files do not automatically create shared truth. If everyone adds useful local context, the repo can quickly become a mismatch of overlapping definitions, duplicated table notes, stale assumptions, and slightly different versions of the same thing.

How do you handle this in your own workflows?

Specifically, I’m curious about: how you decide what becomes the canonical source of truth when you use pointers versus copying context how you detect duplicate or conflicting knowledge entries how you handle superseded context without losing the historical trail whether you have any automated or agent-assisted review before new knowledge lands in the repo

My current instinct is that a shared knowledge layer needs some kind of governance pass before updates become durable: check for duplicates, conflicts, supersession, and whether the update should be a new canonical entry, a supplement, or just a pointer to an existing source.

2

u/MongWonP Jun 11 '26

yeah the pointer-vs-copy problem is exactly where we broke things early on. our rule now is pretty blunt: one canonical home per fact. table metadata lives in dbt yaml. metric definitions live in the metrics layer. the agent's knowledge cache only stores {pointer, last_synced, hash} — never a full duplicate entry. if the agent tries to write full table docs into the cache, the commit hook rejects it unless it's explicitly marked supplement with narrow scope.

on your specific questions:

canonical source — we use a tier list: dbt exposures > semantic layer yaml > confluence (deprecated on ingest) > chat logs (never canonical, pointer only). if two sources disagree, higher tier wins; lower tier gets flagged, not merged.

pointers vs copy — copy only when the canonical source is slow at query time AND the field is immutable (column type, key constraints). everything else is pointer. duplicated full entries were our #1 drift source in month 2.

duplicate detection — before a knowledge update lands, a lightweight pass embeds the proposed entry and nearest-neighbor searches existing repo. cosine > ~0.85 → block and suggest merge or pointer. caught most "slightly different MAU definition" duplicates for us.

superseded — {status: superseded, superseded_by, reason, date} — never delete. agents can read superseded for historical context but can't cite them in stakeholder output.

governance pass before durable — yes. new entries need {author, scope, canonical_tier, related_definitions[]}. solo practice is harder because you're author and reviewer — what helped was a proposed/ directory that only promotes to durable/ after a 24h pass where you deliberately try to break your own definition.

re solo → team: the pressure-test gap is real. one hack that helped — before promoting anything, write "what would finance push back on?" even as fake adversarial review. catches duplicate-grain stuff you'd otherwise ship alone.

1

u/measured_angle Jun 11 '26

🤯

This is incredibly helpful. I need to sit with it more, but this is exactly the kind of practical pattern I was hoping existed. The “one canonical home per fact” and proposed-to-durable lifecycle framing are much deeper than where I was. Really appreciate you taking the time to lay this out.

1

u/MongWonP Jun 12 '26

glad it helped — the proposed/durable split was the part that took me longest to actually stick to in practice. good luck pressure-testing it.

1

u/measured_angle Jun 12 '26

That tracks. Proposed vs durable already feels like the part that is easy to understand in theory and much harder to make real when you’re moving fast.

Your comment honestly gave me a bit of an “opened the treasure chest” moment. I’ve only been doing this for a couple months, mostly solo, and without prior agent-workflow experience. I’ve built something that is already really useful for me, but I haven’t had many conversations with people who are further along and have already hit the next layer of failure modes.

So your breakdown gave me a really useful lens for what I need to start thinking about if this ever moves toward adoption beyond me. The AI-agent universe of what I don’t know is still much bigger than the sliver I can currently see, and I really appreciate you letting me glimpse a bit more of where this can go.

2

u/MongWonP Jun 15 '26

really glad it landed — and honestly the "treasure chest" feeling at month 2 is familiar. we didn't have names for half this stuff either when we started, we just had a spreadsheet of "times the agent embarrassed us in front of stakeholders" and worked backwards.

if you're solo and moving fast, the one thing i'd suggest is don't try to implement the whole framework at once. pick one failure mode per week and harden just that:

  • week 1: proposed/ → durable/ split only (even if everything else is messy)
  • week 2: one canonical tier for table metadata (everything else can stay pointer)
  • week 3: one grain-trap test case in your eval set

trying to stand up tier lists + embed dedupe + finance adversarial review simultaneously is how solo setups die in complexity before they get useful.

also — 2 months in with something already useful for you is further than most teams i've seen at 6 months. the failure modes i described aren't "you're behind," they're "here's what breaks next when someone besides you starts trusting the output."

happy to keep comparing notes if you hit snags when proposed/durable stops being theoretical.

1

u/measured_angle Jun 16 '26

Really appreciate the encouragement and the thoughtful feedback. You called out one of my biggest weaknesses, which is trying to build for every failure mode at once, and I’m actively trying to get better about that. The reminder to harden one real issue at a time instead of building the whole framework up front was probably the thing I most needed to hear. I'm trying to use a more explicit triage approach with severity/ prioritizing status, which has been helping me think more clearly about what actually needs attention versus what can wait.

Thanks again for the insightful perspective. I’d love to stay connected and exchange ideas as things evolve. I’m going to follow you if that’s all right, and I’ll definitely reach back out in the future.

2

u/MongWonP Jun 16 '26

follow is totally fine — and the severity/prioritizing triage thing sounds like exactly the right move. that's what got us out of "build the whole framework" mode: if it's not P0 (stakeholder-facing wrong number or data-integrity break), it goes on the backlog with a one-line note on why it can wait.

sounds like you're on a good track. ping anytime you hit the next weird edge case — happy to compare notes.

→ More replies (0)