I Deleted Six Attribution Models Before I Shipped One Alert
Before my marketing-data platform could send a single useful alert, I deleted six attribution models, a competitive-intelligence feature, and a tracking audit. They were not wrong. I had built the brain before the warehouse.
I deleted six attribution models before I shipped a single alert. Not because they were wrong. Because I had built the brain before I had built the warehouse.
The temptation
The smart features are the ones everyone wants to see first. Attribution modeling that tells you which channel really drove the lead. Competitive intelligence. The dashboard that makes the whole thing look finished. That is the work that demos well, so that is the work it is tempting to start with.
I started with some of it. Then I deleted it.
Warehouse first
The decision the whole platform actually rests on was boring. Before any intelligence, aggregate every marketing source into one place. Ad platforms, analytics, search, the CRM, all of it flowing into a single BigQuery warehouse. Canonical fact tables, keyed by one universal client_id, so a number means the same thing no matter which feature reads it.
The shape is three steps, in order. Ingest the raw data. Connect it into facts you trust. Only then surface anything on top. Nothing downstream gets built until the layer under it is trustworthy. An alert, a report, an attribution model: every one of those is just a reader of fact_daily_performance, and a reader is only as honest as the table it reads.
What I deleted
When I broke that order, the system told me. The features I had built ahead of trustworthy data all came out.
A multi-touch attribution system, six models of it, gone. A competitive-intelligence feature, gone. A tracking-audit engine, gone. Each one tagged with the same note when I removed it: premature, built before reliable data existed. They were not bad code. They were good code computing confident answers on top of data I could not yet stand behind.
The clearest one was a GA4 export. I had wired GA4 to BigQuery across dozens of properties, and it flowed for six-plus weeks. Then I closed it as a dead end and deleted it, because nothing downstream ever consumed a row of it. Six weeks of data moving, into nothing. It was not feeding a single decision. Collecting data because you can is a liability, not an asset. An un-consumed stream is not value waiting to happen. It is noise you now have to keep alive.
What it taught
Pour the foundation before you build the house. The single source of truth, and the data contracts that keep it honest, are not the unglamorous part of the product. They are the product. The intelligence is downstream of them, and worthless without them.
This matters more now, not less. The thing everyone wants to build today is an agent that answers questions over their data on its own. Point an LLM at an un-modeled pile of facts and it does worse than inherit your errors. It invents new ones, in fluent and confident sentences, and hands them back as business metrics. You cannot put a reliable brain on a warehouse you do not trust. The foundation is the AI readiness.
Deleting six attribution models was not waste. It was the system telling me I had built the brain before the warehouse. So I built the warehouse first, and everything I have shipped since reads from it.