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.
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:
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 }
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.
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.
// ═══════════════════════════════════════════════════════════════ // 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
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.
GDPR, CCPA, and emerging AI regulations restrict how data moves between systems and jurisdictions. Cross-platform identity resolution is increasingly illegal without explicit consent.
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.
Cookie deprecation, App Tracking Transparency, fingerprinting restrictions. The technical bridges between platforms are being burned faster than new ones can be built.
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.
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.