PRIME and the AI layer at StellarAlgo
Unified every client's data into one governed layer, so teams self-serve and AI answers match the dashboards.
Problem
Each client's data lived in its own database. A question across sports properties meant visiting each system in turn. A key refresh ran weekly by hand, so data could be 7 days old. Ownership was split across teams, with no agreed service levels.
Role
As Director, Product Innovation & Analytics, I owned product management for PRIME from planning through general availability. I worked across Data Engineering and Customer Success, with a product pod of four.
Solution
PRIME consolidates every client's data into one governed layer that any approved team or tool can use.
- One governed layer. Three source systems feed one Snowflake database through bronze, silver and gold layers. The data is transformed once in dbt, across 100+ tested and documented models.
- A contract people can rely on. I wrote PRIME's data contract. It sets refresh and accuracy targets per data domain, three incident tiers and clear ownership.
- Governance by default. Personal data is masked at the raw layer, and access follows roles. An analyst, a client dashboard and an AI query each see only what they're allowed to.
- Daily, not weekly. Airflow and dbt replaced the manual weekly process. Freshness went from 7 days to under 12 hours.
- Problems caught before a client sees them. Freshness is checked against each client's target every 30 minutes. AI-written digests summarize pipeline errors hourly, and cost is tracked per model.
Data sources
- Ticketing and accounts
- App config and logs
- Automations data
- Segment data
- Client and league reference files
PRIME process, in Snowflake
- dbt
Bronze
Raw, as it arrived. Personal data masked here.
- Tickets
- Events
- Customer accounts
- Cohorts
- Users
- Segments
- Tenants
- Runs
- Details
- Clients
- Leagues
- dbt
Silver
Dimensionally modelled. One definition across every property.
- Events
- Automations
- Platform users
- Accounts
- Ticketing
- Platform activity
- Segments
- Automation runs
- Email by day
- Fan acquisition
- Platform activity
Gold
Consumption endpoints. Rebuilt every run, tested first.
- Team trends
- Automations
- Segment activity
- Platform activity
- Email campaigns
Consume
- Client success platform
- Data sharing with clients
- BI dashboards
- AI assistants
On top of gold, I led discovery for Stellar Insights, which answers plain-English questions over a semantic layer. Each semantic model has one grain, such as property by day or campaign. The bot routes each question to the right one, so its answers match the dashboards. We shipped an internal Customer Success bot on the same layer first.
“How did ticket revenue trend this month?”
PRIME agent
Reads the semantic layer and picks the model whose grain fits. Access follows roles.
Semantic layer
- TPrimary
Team trends
1 row / team / day
Wide daily table: category totals and performance rates across the fan lifecycle.
- Ticketing
- Fan acquisition
- Win-back %
- Upsell %
- Fan growth
- CEmail
Campaigns
1 row / campaign
Send, open and click metrics for each email campaign.
- Sends
- Open rate
- Click rate
- SAudiences
Segments
1 row / segment
Each audience segment built in the fan data platform, with its definition.
- Audience size
- Cohorts
- UUsage
Users
1 row / user / day
Daily platform usage per person: engagement, sessions and features used.
- Daily usage
- Sessions
- Features
- AAutomation
Automations
1 row / automation
Trigger, actions, audience and full run history for each automation.
- Trigger
- Actions
- Audience
- Run history
Answered from Team trends, one row per team per day. Same table as the dashboards, so the number matches.
I'm now leading the move of the remaining analytics workloads from AWS Athena to Snowflake. Cost visibility and alerts are built in.
Outcome
- Governed layer for every client's data, replacing a database per client
- 1
- Governed layer for every client's data, replacing a database per client
- Routine Customer Success questions, without an engineering ticket
- Self-serve
- Routine Customer Success questions, without an engineering ticket
- To flag a missed refresh, before a client notices
- 30 min
- To flag a missed refresh, before a client notices
Customer Success, Product and clients now work from the same numbers, on a schedule they can rely on. Routine questions that once needed an engineering request are now self-serve.