MG12 design
← All articles Essay · Data & ML architecture

One truth, delivered to the edge

A single customer view that lives in a warehouse is a reporting asset. The same view, present at every touchpoint and every decision point, is a different product entirely. And once machine learning is in the path, context is the largest single lever on the quality of the answer.

Almost every organisation of any size has tried to build a single view of the customer. Quite a few have succeeded, in the narrow sense: somewhere in the estate there is a table that reconciles the duplicates, resolves the identities, and holds the definitive answer to who this person is and what they have bought.

And then it is read by reports. The definitive view of the customer, assembled at considerable expense, is consulted by analysts and by nobody else. Meanwhile the contact centre agent, the chatbot, the app, the field engineer and the outbound campaign are each working from their own partial copy, and each one is confidently wrong in a different way.

The value of a canonical entity is not in having it. It is in reaching it, from every point where something is decided or said.

What a canonical entity actually is

A canonical entity is the one authoritative representation of a real thing: a customer, an order, a property, an asset, a contract. Not a copy that is usually right, and not a view assembled by joining four systems at read time and hoping they agreed. One record, one identity, one write path.

The useful ones share a few properties that the average master-data project skips:

  • A stable identity key. Every reference resolves by identifier, never by name. This sounds obvious and it is the single most common way these systems fail in practice: when a write arrives without a resolvable key, the engine has no way to know it is the same customer, so it quietly creates a second one. A fortnight later you have two of everybody and no idea when it started.
  • Provenance on every field. Where did this come from: the customer told us, a partner sent it, a model inferred it, an agent typed it? Different sources warrant different levels of trust and different handling when they conflict.
  • Confidence, held honestly. An inference is not a fact. If the system believes something at sixty per cent, that number has to survive all the way to the point of use, because a downstream decision may be entitled to act on a guess and may equally not be.
  • History, not just state. Relationships change. Someone moves, an account transfers, a tenancy ends. If the model can only express the present, you lose the ability to answer what was true at the time of the thing you are now investigating.
  • Hydration at the point of read. Anything that references the entity holds the key and resolves the current values when it is read, rather than freezing a copy at write time. Copies drift; keys do not.

The edge is the point

Get those right and you have a good record. The product only appears when that record is available, with low latency, at every touchpoint and every decision point: the chat turn, the IVR routing decision, the agent's screen, the eligibility check, the outbound message, the field engineer's job card, the retrieval step in front of a model.

That is an architectural commitment, not a data commitment. It means the entity is served by something with an operational latency budget rather than an analytical one. It means changes propagate as events, so a touchpoint learns that something moved instead of discovering it on the next nightly load. And it means the canonical store is the thing every channel actually reads, rather than the thing every channel was supposed to sync with.

Three moments where this stops being theoretical

The order that is already on its way

A parcel moves to "out for delivery" at 06:40. Under the usual architecture, nothing happens until the customer wonders where it is, opens the app or the chat, asks, and the assistant fetches a status. Every one of those contacts is a cost, and every one of them was avoidable.

When the order is canonical and its state changes are events, the change reaches the touchpoints the moment it happens. The customer can be told before they ask. If they do ask, the assistant already knows, and the conversation starts from the answer instead of from a lookup. The same signal deflects contact, improves the answer when contact happens anyway, and does both from one piece of plumbing.

The customer who has died

Bereavement notifications are where a fragmented customer view stops being an efficiency problem and becomes a harm. A family notifies one department. That department updates its own system. Two weeks later a renewal reminder, a marketing email or a cheerful chatbot greeting arrives addressed to the person who died, because the notification never reached the systems that generate outbound contact.

This is not a rare edge case and it is not a tone-of-voice problem. It is an architecture problem with a straightforward architectural answer: the status belongs on the canonical entity, and every surface reads it before it says anything. Marketing suppresses. The assistant does not attempt to handle the conversation at all; it hands to a trained human immediately, and says so plainly. Retention offers, satisfaction surveys and re-engagement journeys all switch off together, because they are all consulting the same field rather than each keeping their own opinion.

The complaint that is still open

A customer with an unresolved complaint is a different customer, and almost no system treats them as one. They contact again about something unrelated and get the standard flow: the same thresholds, the same queue, the same cheerful upsell, and no acknowledgement that anything is outstanding.

If the open complaint is part of the canonical view of that relationship, every decision point can read it. Escalation thresholds tighten. Sales prompts suppress themselves. Routing prefers a senior agent. The assistant opens by acknowledging the open issue rather than pretending it does not exist. None of that requires new intelligence, only that the context reaches the place where the decision is made.

Why machine learning raises the stakes

Teams spend a great deal of effort choosing between models and comparatively little on what the model is told. That balance is backwards. In production systems, the difference between a good answer and a poor one is far more often the context supplied than the parameters behind it. A capable model with the right facts about this customer, this order and this history will beat a more capable model working blind, every time, and it will do it more cheaply.

Most of what gets described as hallucination in customer-facing assistants is not really invention. It is absence. The model was asked a question that could only be answered from context it was never given, and it did the statistically reasonable thing. Fix the context and a surprising proportion of the behaviour people are trying to prompt-engineer away simply stops occurring.

A canonical entity layer is the cleanest way to supply that context, for a reason beyond convenience: it is a controlled boundary. When every model call assembles its context from one place, you can state exactly what the model was told, enforce what may never be sent to it, and reproduce the inputs to a decision after the fact. That last property is what turns an ML feature into something a regulated business can actually defend, and it is very difficult to retrofit onto a system where each channel builds its own prompt from whatever it happened to have.

One boundary, several obligations

Consent, data minimisation, residency, the right to erasure and the record of what was disclosed to whom are all far more tractable when there is a single place that answers "what do we hold about this person, where did it come from, and what is allowed to leave". Fragmented copies make each of those obligations a search problem across the estate, which is precisely why they are so often honoured in policy and not in fact.

Where it goes wrong

FailureWhat you see
Forked duplicates A write path that matches on a name or an email instead of a key. Two records for one person, diverging quietly, each authoritative to a different channel.
Frozen copies The entity was snapshotted into a transaction at write time. The address changed. The job card still has the old one, and it is nobody's job to notice.
Analytical latency on an operational path The single view is real, but it lands the next morning. The touchpoints keep their own copies because they have to, and you now maintain both.
Inference laundered into fact A model guessed, the confidence was dropped somewhere in transit, and a downstream system is now treating a forty per cent belief as settled truth.
A view with no reach The most common one. The record is excellent. Nothing customer-facing reads it.

The short version

Build the definitive view, then judge it by how many decisions it reaches. A canonical entity that serves reports is a data project. The same entity, resolved by key, carrying its provenance and its confidence, propagated as events and read at every touchpoint, is what lets a service anticipate rather than react, handle sensitive situations with the care they demand, and give a model enough context to be worth deploying.

It is the substrate under most of the work on this site: the entity model that Syntalyze resolves before a workflow or a chat turn can act, and the profile in Aurum, where every belief carries where it came from and how sure the system is, because a product that acts before it is asked has no margin for being confidently wrong.

Building something this applies to?

Start a conversation