In Part One, we watched a single user's purchase intent fragment across seven tabs and four platforms before vanishing entirely. Now let's look at the other side — the systems that were supposed to catch that signal, and understand why none of them did.

The modern digital commerce stack is not a system. It's an archipelago — a chain of isolated islands, each with its own language, its own currency, its own gravitational pull. Data flows into each island but rarely flows out. And the ocean between them? That's the Abyss.

The Six Silos

Every business that sells anything online depends on at least six distinct data systems. Each one captures a different fragment of the customer's journey. Each one is optimized for a different business objective. And each one is structurally incapable of seeing what the others see.

Interactive Architecture
The Silo Archipelago
🔍
Search Platform
Holds: Query intent
Google, Bing, Perplexity. Captures what the user typed, what they clicked, and what they ignored.
Blind to: Why they searched. What they did after leaving.
📱
Social Platform
Holds: Interest signals
YouTube, Instagram, TikTok, Reddit. Captures watch time, likes, shares, comments.
Blind to: Purchase timeline. Budget constraints. Competing options.
🤖
AI Layer
Holds: Synthesized answers
Google AI Overviews, ChatGPT, Perplexity, Claude. Generates confident summaries from crawled content.
Blind to: User context. Financial situation. Prior purchase history.
🛒
Commerce Platform
Holds: Browse + cart data
Apple.com, Amazon, Shopify. Captures page views, product configs, cart additions, abandonment.
Blind to: The six tabs before. The text message that killed the sale.
📊
CRM / Analytics
Holds: Customer records
Salesforce, HubSpot, GA4. Identity, segments, attribution models. Stitches sessions into "journeys."
Blind to: Cross-platform behavior. Private channel decisions.
🏭
ERP / Supply Chain
Holds: Inventory + operations
SAP, Oracle, NetSuite. Stock levels, procurement, fulfillment. Forecasts, not real-time intent.
Blind to: Demand signals that never converted. The 67% who walked away.
⚠ No shared memory · No common identity · No signal handoff

Those six cards look clean on a diagram. But the real story is in the data structures — what each system actually stores. Let's open the hood on each one.

// ─── Google Analytics 4 — Event Schema ───
// What Google Analytics stores for each user interaction

CREATE TABLE ga4_events (
  event_date          DATE,
  event_timestamp     INT64,        -- microseconds since epoch
  event_name          STRING,       -- 'page_view', 'scroll', 'click'
  user_pseudo_id      STRING,       -- anonymous cookie-based ID
  user_id             STRING,       -- NULL unless logged in
  device.category     STRING,       -- 'desktop', 'mobile', 'tablet'
  device.browser      STRING,
  geo.country         STRING,
  geo.city            STRING,
  traffic_source.source   STRING,  -- 'google', 'direct', 'youtube'
  traffic_source.medium   STRING,  -- 'organic', 'cpc', 'referral'
  event_params        RECORD,       -- nested key-value pairs
  ecommerce.purchase_revenue  FLOAT, -- only populated on purchase
  ecommerce.items     RECORD        -- product array
);

-- KEY LIMITATION: user_pseudo_id is cookie-based
-- If user switches browser, device, or clears cookies → new ID
-- Same person on Chrome + Safari = TWO "users" in GA4
-- Fields that DO NOT EXIST: intent, emotion, budget, decision_outcome
// ─── YouTube Analytics — Internal Watch Record ───
// What YouTube stores per video session (simplified)

{
  "watch_id":              "w_8f7a6b5c4d",
  "video_id":              "dQw4w9WgXcQ",
  "channel_id":            "UCxyz123",
  "viewer": {
    "google_account_id":   "acc_12345",  // if signed in
    "anonymous_id":        null,        // if not signed in
    "age_range":           "25-34",     // from Google account
    "gender":              "male",
    "interests":           ["Technology", "Computers"]
  },
  "watch_time_seconds":    342,
  "video_length_seconds":  504,
  "avg_view_percentage":   67.8,
  "traffic_source_type":   "EXT_SEARCH",  // came from Google
  "traffic_source_detail": "google.com",
  "engagement_actions": {
    "liked": false, "shared": false, "subscribed": false
  },
  "ad_impressions":        2,
  "ad_clicks":             0
}
// YouTube knows: watch time, source, demographics (if signed in)
// YouTube DOES NOT track: what user did AFTER watching
// No "purchased_product_discussed_in_video" field exists
// ─── Shopify / Commerce Platform — Order + Abandoned Cart Schema ───

// What the store sees when someone BUYS:
{
  "order_id":        "ORD-20260402-7891",
  "customer": {
    "id":             "cust_abc123",
    "email":          "user@email.com",
    "total_orders":   3,
    "total_spent":    2847.00
  },
  "line_items": [{
    "product":    "MacBook Air M4 15-inch",
    "sku":        "MBA-M4-15-256",
    "price":      1099.00,
    "quantity":   1
  }],
  "attribution": {
    "landing_page":  "/shop/buy-mac/macbook-air",
    "referrer":      "google.com",
    "utm_source":    null,  // organic, no UTM tags
    "utm_campaign":  null
  }
}

// What the store sees when someone DOESN'T BUY:
{
  "type": "abandoned_checkout",
  "customer": null,  // ← anonymous. They never signed in.
  "items": [],        // ← empty. They never added to cart.
  "reason": null      // ← this field literally does not exist
}
// The store has RICH data on buyers, ALMOST NOTHING on non-buyers
// The 67% who walked away? Ghost records. Empty sessions.
// ─── Salesforce CRM — Contact + Opportunity Record ───

Contact {
  Id:                  "003Dn00000xyz789",
  FirstName:           "(known only if they filled a form)",
  Email:               "user@email.com",
  LeadSource:          "Web",
  Account.Industry:   "Technology",
  Last_Activity_Date: "2026-04-02",
  Lifecycle_Stage:     "Marketing Qualified Lead"
}

Opportunity {
  Name:        "MacBook Air Purchase — user@email.com",
  Stage:       "Prospecting",  // ← a guess. They never talked to sales.
  Amount:      1299.00,       // ← assumed. Based on page view.
  CloseDate:   "2026-05-02",  // ← fabricated. Standard 30-day window.
  Probability: 20             // ← a default percentage. Means nothing.
}

// CRM "knows" this person. But everything after the email is fiction.
// The "Opportunity" is a data entry ritual, not actual intelligence.
// If the user never filled a form? This record DOESN'T EXIST AT ALL.
// ─── SAP S/4HANA ERP — Material Demand Record ───
// What the supply chain sees (or doesn't see)

TABLE VBAK -- Sales Document Header
{
  VBELN:   "0000012345",        -- Sales order number
  AUART:   "TA",                -- Standard order type
  KUNNR:   "CUST-00789",        -- Customer number
  NETWR:   1099.00,             -- Net value
  WAERK:   "USD",               -- Currency
  ERDAT:   "20260402"           -- Created date
}

TABLE VBAP -- Sales Document Item
{
  MATNR:   "MBA-M4-15-256",     -- Material number
  KWMENG:  1.000,               -- Quantity
  NETPR:   1099.00              -- Net price
}

// ERP ONLY gets a record when a PURCHASE HAPPENS.
// For our MacBook searcher who didn't buy:
//   SELECT * FROM VBAK WHERE KUNNR = 'our_user';
//   → 0 rows returned.
//
// The ERP has NO concept of "demand that didn't convert"
// No table for: abandoned_intent, browsed_but_left, almost_bought
// Demand forecasting = extrapolation from PAST SALES ONLY
// Result: inventory decisions based on 33% of actual demand
// ─── Meta Ads Manager — Conversion Event Schema ───

{
  "event_name":      "ViewContent",
  "event_time":      1712073612,
  "event_source_url": "https://apple.com/shop/buy-mac/macbook-air",
  "user_data": {
    "em":  "[SHA256 hashed email]",  // if pixel fires
    "ph":  null,
    "fbp": "fb.1.1712073600.987654321",
    "fbc": null  // no Facebook click ID — user came from Google
  },
  "custom_data": {
    "content_name": "MacBook Air M5",
    "content_type": "product",
    "value":        1299.00,
    "currency":     "USD"
  },
  "action_source": "website"
}

// Meta received this event via the Facebook Pixel on Apple.com
// But wait — Safari and Firefox BLOCK the _fbp cookie
// Chrome deprecated third-party cookies in 2025
// Result: Meta sees MAYBE 35% of actual website activity
// Attribution model: "We think our ad caused this view"
// Reality: User came from Google Search. Meta had nothing to do with it.

Look at this architecture and ask a simple question: which system knows that a specific user searched Google, watched two YouTube comparisons, configured a product on the store, checked their bank balance, texted a friend, and then closed the tab?

The answer is none of them. Not one. Each system sees its own fragment and assumes the rest doesn't exist. And the data formats confirm it — different schemas, different ID spaces, different timestamps, different purposes. These systems weren't designed to talk to each other. They were designed to serve their own business model.

The Failed Join

Suppose you tried to stitch these silos together. An analyst, armed with a data warehouse and good intentions, might write something like this:

resolve_customer_journey() — The Query That Always Fails PSEUDO-CODE
def resolve_customer_journey(user_signal):
    """Attempt to reconstruct a complete customer journey
    across all six silos. Spoiler: this doesn't work."""

    ## Step 1: Start with the Google search event
    search = ga4.query(
        event_name="search",
        search_term="m4 macbook air vs m5",
        date="2026-04-02"
    )
    google_id = search.user_pseudo_id  # "GA1.2.1234567890"

    ## Step 2: Try to match to YouTube watch session
    youtube = youtube_analytics.query(
        viewer_id=google_id   # ✗ FAILS — YouTube uses different ID space
    )                              # GA4 pseudo_id ≠ YouTube viewer_id
                                    # Even if same Google account, IDs don't map

    ## Step 3: Try to match to Apple.com visit
    apple = apple_analytics.query(
        session_id=google_id  # ✗ FAILS — Apple uses its own session IDs
    )                              # Third-party cookies blocked → no cross-site link
                                    # referrer="google.com" exists but can't identify WHO

    ## Step 4: Try to match to CRM record
    crm = salesforce.query(
        email=???             # ✗ FAILS — user never filled a form
    )                              # No email → no CRM record → person doesn't exist in CRM

    ## Step 5: Try to match to ERP demand signal
    erp = sap.query(
        customer_id=???      # ✗ FAILS — no purchase → no ERP record at all
    )                              # ERP literally has zero rows for non-buyers

    ## Step 6: Try to match to private conversation
    imessage = private_channel.query(
        user=???              # ✗ IMPOSSIBLE — encrypted, off-platform, no API
    )

    ## Result:
    return {
        "google_search":   search,       # ✓ Have this
        "youtube_watch":   None,         # ✗ Can't link
        "apple_visit":     None,         # ✗ Can't link
        "crm_record":      None,         # ✗ Doesn't exist
        "erp_demand":      None,         # ✗ Doesn't exist
        "private_decision": None,        # ✗ Impossible
        "journey_completeness": "16.7%"  # 1 of 6 silos resolved
    }
Six systems queried. One returned data. Five returned None. Journey completeness: 16.7%. This isn't a query optimization problem. It's a structural impossibility. The IDs don't match, the schemas don't align, and the data that would connect them either doesn't exist or is behind walls you can't legally cross.

The Data Knows / Doesn't Know Matrix

Let's make this concrete. For our MacBook Air searcher from Part One, here's exactly what each system knows and doesn't know across the key dimensions of a purchase decision.

Signal Distribution — Who Sees What
What product
Search · Commerce · AI
Price sensitivity
Commerce (inferred)
Comparison set
Search · Social
Purchase timeline
CRM (guess)
Budget / financial
Emotional state
Social influence
Decision outcome
Commerce (if purchased)
Well captured
Partially captured
Barely captured
Invisible

The pattern is devastating. The systems are good at knowing what. They're mediocre at knowing how much and compared to what. And they're functionally blind to the dimensions that actually determine whether someone buys: can they afford it, how do they feel about it, who's influencing them, and what did they ultimately decide.

We have built trillion-dollar platforms that can tell you exactly which pixel a user's mouse hovered over, but cannot tell you whether that user went home happy or frustrated.

The Three Tracking Paradigms

To understand why these silos can't talk to each other, it helps to see the three fundamentally different tracking architectures that currently coexist — and why each one has a different kind of blindness.

Three Tracking Architectures — How Data Flows (or Doesn't) ARCHITECTURE
// ═══════════════════════════════════════════════════════════════
// PARADIGM 1: Third-Party Cookies (dying)
// ═══════════════════════════════════════════════════════════════

  User ──visits──→ apple.com
                      │
                      ├── Sets apple.com cookie (first-party) ✓
                      ├── Sets facebook.com cookie (third-party) ✗ BLOCKED
                      ├── Sets doubleclick.net cookie (third-party) ✗ BLOCKED
                      └── Sets criteo.com cookie (third-party) ✗ BLOCKED

  Status: Safari blocked since 2020. Firefox since 2021. Chrome since 2025.
  Cross-site identity: DEAD for ~85% of web traffic.


// ═══════════════════════════════════════════════════════════════
// PARADIGM 2: First-Party Data + Server-Side Tagging
// ═══════════════════════════════════════════════════════════════

  User ──visits──→ apple.com
                      │
                      ├── Sets first-party cookie ✓
                      └── apple.com server ──sends event──→ Google (server-to-server)
                                                       ──→ Meta  (Conversions API)
                                                       ──→ TikTok (Events API)

  Status: Works, but requires user to be ON THE BUSINESS'S SITE.
  Limitation: Can only track what happens ON apple.com.
  Cannot see: Google search, YouTube watch, Reddit browse, text to friend


// ═══════════════════════════════════════════════════════════════
// PARADIGM 3: Walled Garden Login-Based Identity
// ═══════════════════════════════════════════════════════════════

  User (signed into Google) ──search──→ Google Search
                                     ──watch───→ YouTube
                                     ──maps────→ Google Maps
                                     ──email───→ Gmail

  Status: Works WITHIN the walled garden. Google sees all Google.
  Limitation: Stops at the garden wall.
  Cannot see: What user did on apple.com, Amazon, Reddit, iMessage
  Each walled garden (Google, Meta, Amazon, Apple) sees ONLY its own world
  Result: 4 parallel universes, each containing ~20% of the journey
Three paradigms. The first is dead. The second only sees your own property. The third only sees its own walled garden. No paradigm can see the complete journey. This is not a bug — it's the architecture.

The Privacy Walls (Justified but Compounding)

Here's the uncomfortable nuance: many of these silos exist for very good reasons. Privacy regulations, competitive dynamics, and genuine user protection have created walls between systems. These walls are not the villain of this story. But they are a structural reality that makes the problem exponentially harder to solve.

Regulatory Walls

GDPR, CCPA, and emerging AI regulations restrict how data moves between systems and jurisdictions. Cross-platform identity resolution is increasingly illegal without explicit consent.

Competitive Walls

Google will never share search intent data with Meta. Apple will never share Safari browsing data with Google. Each platform's data is its competitive moat.

Technical Walls

Cookie deprecation, App Tracking Transparency, fingerprinting restrictions. The technical bridges between platforms are being burned faster than new ones can be built.

Architectural Walls

ERP systems speak batch. CRMs speak API. Analytics speaks events. Social speaks engagement. There is no universal protocol for "a human is trying to make a decision."

These walls create what I call compounding blindness. Each wall blocks a small piece of the picture. But when you stack six silos behind four types of walls, the total visibility isn't "slightly reduced" — it's catastrophically fragmented. The business ends up making decisions based on the 15–20% of the customer journey that happens to be visible to whatever system they're looking at.

The Cost of Fragmentation

This isn't an abstract architectural problem. It has a measurable cost — in revenue, in efficiency, and in human experience.

$3.1T
Estimated annual global cost of poor data quality in commerce decisions (Gartner, projected 2026)
73%
of marketing attribution models use incomplete cross-platform data — making budget allocation partly fictional
40%
of ERP demand forecasts miss actual demand shifts because they can't see pre-purchase intent signals
6.2×
cost to acquire a new customer vs. retaining one — but retention systems can't see why customers hesitate

These numbers represent an enormous, systemic inefficiency. Businesses are spending billions on advertising to generate demand, while simultaneously losing billions because they can't see the demand that already exists.

The Abyss Is Not Empty

Here's the thing about the Abyss: it's not actually empty. The data exists. The signal was generated. Every search, every scroll, every hesitation, every closed tab — these all happened in the real world and left traces. The problem is that those traces are scattered across incompatible systems, locked behind privacy walls, and decaying at different rates.

The Abyss is not a lack of data. It's a lack of architecture. The data is there. The connections are not. And until very recently, there was no technology capable of bridging these gaps without violating the privacy walls that rightly exist between them.

That technology is now arriving. It's called AI. And it's doing something nobody planned for — it's inserting itself as a new layer between the user and every other system, simultaneously making the problem worse and offering the first credible path to solving it.

That's what we'll examine next.

Up Next — Chapter 03

The AI Intermediary

AI is now making purchasing recommendations — but businesses can't see it happen, track it, or verify it. A new opaque layer has been inserted into the decision stack.

Continue Reading →