Data gravity is the idea that data is expensive and risky to move, while compute (processing power) is relatively cheap to relocate.
Most enterprise AI systems are built like this:
Your Governed Data (Lakehouse)
↓ [data gets pulled OUT]
External Vector Database
↓
External LLM / AI Stack
↓
Response back to user
Every time data crosses that boundary, you pay penalties:
Think of your data like a hospital's patient records. Moving them to a separate building every time a doctor needs them creates delays, security risks, and compliance nightmares. The smarter solution? Bring the doctor to the records.
┌─────────────────────────┐ ┌──────────────────────────┐
│ Your Data Platform │────▶│ Separate AI Stack │
│ (Governed Lakehouse) │ │ - External LLM │
│ │ │ - Vector DB │
│ Policies live HERE │ │ - Bespoke serving │
└─────────────────────────┘ │ Policies re-built HERE │
└──────────────────────────┘
Problems:
┌──────────────────────────────────────────────────┐
│ Your Data Platform │
│ │
│ Data + Models + Agents + Tools + Memory │
│ │
│ ONE governance layer covers EVERYTHING │
└──────────────────────────────────────────────────┘
Benefits:
"Post-hoc" = after the fact. Most AI systems apply governance after the agent has already touched the data:
Agent accesses ALL data
↓
Computation runs on ALL data
↓
Result is filtered/redacted ← governance happens HERE (too late)
↓
User gets response
Consider this example:
An agent calculates the average salary across employee records. Some employees' records are restricted from certain users.
Restricted records: $200,000 ← user shouldn't see this
Allowed records: $50,000
$60,000
$55,000
Average computed: $91,250 ← this number is SHAPED by restricted data
Even if you hide the $200,000 record afterward, the average already encodes that information. No redaction can undo a completed calculation.
Governance must happen at query planning time, not at response rendering time.
A costly spiral that happens when governance is applied after the fact, causing agents to waste enormous amounts of compute.
Step 1: Agent requests data
↓
Step 2: Gets blocked/redacted output (governance fires too late)
↓
Step 3: Agent interprets this as a FAILURE
↓
Step 4: Agent tries again, differently
↓
Step 5: Loads more context into the model
↓
Step 6: More tokens consumed, more cost
↓
Step 7: Repeat... (1 request → thousands of billed tokens)
The agent is forced to compensate for missing governed answers by:
None of this is the actual task — it's wasted work caused by poor architecture.
Give the agent a clean, governed answer in a single pass by enforcing policy before computation begins.
These are two distinct but related concepts that both need governance.
| Property | Description |
|---|---|
| What it is | The live scratchpad during a session |
| Examples | Current conversation, task in progress, cached results |
| Lifespan | Exists during the session |
| Storage needs | Fast per-row reads/writes, keyed lookups, atomic updates |
| Property | Description |
|---|---|
| What it is | What persists after the session ends |
| Examples | User preferences, past outputs, customer history |
| Lifespan | Outlives the session |
| Sensitivity | "User X is a high-value EU customer" = sensitive data bound by privacy laws |
Both state and memory are sensitive data — but most systems store them in external databases (Redis, Postgres) that sit outside the governance boundary:
Governed Platform External Memory Store
│ │
│ agent writes ─────────▶│ ← governance can't see this
│ "user X is EU" │
│ │ ← no lineage
│ │ ← no access controls
│ │ ← separate security model
Multiple agents working together toward a larger goal:
Planner Agent
/ \
Specialist A Specialist B
\ /
Supervisor Agent
When agents keep private state and pass context peer-to-peer:
Agent A's memory: "Task is 60% done"
Agent B's memory: "Task is 45% done" ← diverged!
Problems that emerge:
All agents read/write the same governed layer:
Agent A ──▶ ┌─────────────────────┐ ◀── Agent B
Agent C ──▶ │ Shared State Store │ ◀── Agent D
│ (Governed, Atomic) │
└─────────────────────┘
│
Single source of truth
Atomic updates
Full lineage traceable
A data-native agent has all components inside the same governed platform:
┌─────────────────────────────────────────────────────────┐
│ Data Platform (e.g., Databricks) │
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Your Data │ │ AI Models │ │
│ │ (Lakehouse) │ │ (Serving) │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Agent State │ │ Agent Tools │ │
│ │ & Memory │ │ │ │
│ │ (Lakebase) │ │ │ │
│ └──────────────┘ └──────────────┘ │
│ │
│ ════════════════════════════════════════════════════ │
│ Unity Catalog (Governance Layer) │
│ - Access controls │
│ - Policy enforcement at query planning │
│ - Lineage tracking │
│ - Business definitions │
│ ════════════════════════════════════════════════════ │
└─────────────────────────────────────────────────────────┘
| Dimension | Data-Native | External |
|---|---|---|
| Governance | Single control plane, enforced at query time | Rebuilt in every component, applied after the fact |
| Security | Data stays in your VPC | Data leaves your perimeter |
| Latency | Low (no network hops) | High (multiple round-trips) |
| Cost | Consolidated, no egress fees | Fragmented pricing + egress costs |
| Agent Memory | Governed, traceable, joinable to source data | Separate system, no lineage, no governance visibility |
| Observability | All logs in one place | Scattered across vendors |
Think of it this way:
Old approach: Build a city, then build a separate police department in another city and try to enforce laws remotely.
Data-native approach: The police department is built inside the city, operating under the same laws, with full visibility into everything happening.
The key insight is that governance cannot be bolted on after computation occurs — it must be woven into the fabric of where and how computation happens in the first place.