Case studies

Outcomes first. Method underneath.

Every engagement below ran to a fixed-fee scope and a measurable outcome, then ended in a handoff your team owns. Engagement details are anonymized to protect client confidentiality.

$1.2M
retention spend recovered
14s → 4s
dashboard load time
11 hrs/night
compute runtime eliminated
-53%
dashboard JSON, render-identical
Financial services · Sprint

14-second dashboard loads cut to 4 at a $5B AUM wealth manager

Client
US wealth manager, $5B AUM, 47 dashboards across 9 advisor pods
Engagement
3-week fixed-fee sprint
Outcome
Loads down from 14s to 4s; 11 of the 13 patterns in our predicate-failure checklist fixed
Why it mattered
Advisors came back to the dashboards. Latency complaints stopped.

The latency complaints kept pointing at the same thing: a security predicate written in 2017 that had picked up 23 CASE branches across seven years of reorgs. The tempting fix was to index the join column and call it done. That would not have held; no index rescues 23 branches of stacked CASE logic. So we rebuilt access around territories instead. The join moved to an indexed column and the logic came down to 4 branches. We validated the new predicate against five days of production access patterns before we cut over. No advisor noticed the switch, and invisible was exactly what we were going for.

Every advisor promotion broke someone's access, because the predicate assumed the role hierarchy never moved

The predicate's join ran against a high-cardinality, unoptimized column, so concurrent loads degraded into slow, brute-force scans of the whole datasetA static role allow-list left new advisor pods invisible, with no error to tip anyone off
Healthcare technology · Audit + Sprint

Catching the churn model that misrouted $1.2M in retention spend

Client
US healthcare SaaS, 800 employees
Engagement
5-day audit, then a 4-week model rebuild
Result
Leakage-inflated '92% accuracy' replaced with an honest, deployable 71%
Recovered
$1.2M of retention budget redirected off false positives within 6 months

Sales ops had been routing retention spend off an Einstein Discovery churn model for 14 months when we opened it up. The 92% accuracy figure was the first red flag. Churn does not predict that well when the model is clean. The audit turned up three separate target leakages. Account.Id was sitting in the feature set as a raw high-cardinality categorical, which lets a model memorize accounts rather than learn churn. A date field in the training data only got populated after the event it was supposed to predict. And the renewal-risk score the model leaned on hardest came from the CS team, filled in after renewals had already closed. The rebuilt model scored 71%. Lower number, real signal. Once spend followed it, $1.2M surfaced that had been chasing accounts that were never at risk.

Account.Id as a direct model feature is memorization dressed up as accuracy

A date column in the training set that stayed empty until the outcome it was predicting had already happenedCS scored renewal risk after renewals closed, so the label leaked its own answer
Industrial manufacturing · Sprint

Nightly data prep at a 30,000-employee manufacturer, from 14 hours to 3

Client
Global industrial manufacturer, analytics for a distributor network spanning 40 markets
Engagement
2-week fixed-fee sprint
Outcome
Nightly prep 14h → 3h; the 6 AM refresh deadline has held every night since
Knock-on effect
Compute pressure came off the whole org and the morning dashboards became trustworthy again

In 2022 the client migrated everything from dataflow JSON to Recipes, wholesale, because that is what the docs recommended. The docs describe the tools. They say nothing about your workload. Three datasets had landed on the wrong tool. One, a 90M-row dataset, was full-refreshing every night because incremental processing kept misfiring on it. Another, a multi-source revenue rollup, ran 4x slower as a Recipe than it ever had as a Dataflow. The third, a cohort build heavy on window functions, was paying the nightly Compute Relative tax. We moved those three back to dataflow JSON and left everything else where it was. Nobody in-house had a written rule for which tool a dataset belongs on, so we wrote the decision matrix and trained the team to run it without us.

Incremental sync quietly falls back to full refresh when a dataset goes through rename-and-recreate cycles

The Append and Augment nodes it required are materially slower for multi-source aggregation
Consumer packaged goods · Audit

Five days to score a $40B CPG's 2017-era analytics estate for AI readiness

Client
Multinational CPG, $40B revenue, running a 2017-era Wave implementation
Engagement
5-day audit plus planning consultation
Deliverable
10 priority datasets scored against our 10-dimension compatibility rubric
What it bought
A 6-month phased rebuild roadmap with effort estimates, in hand before any capital was committed. The planning consultation is what extends it past the standard 90-day audit horizon

After the Salesforce-Anthropic partnership, the client wanted their distributor analytics in front of Claude through Agentforce 360, and they wanted to know what would break first. The short answer was most of it. Eight of the ten datasets scored under 50/100. The Wave-era security predicates are the worst offenders, because logic a human report viewer never notices will trip an agent reasoning across regions in multiple steps. Auto-exposed Recipe schemas got far less attention and deserved more; half the estate breaks the moment someone renames a column. The roadmap sequences the rebuild by business priority, so the gaps get fixed on schedule instead of discovered mid-rollout.

Wave-era predicates fail under multi-step agent reasoning across regions

One renamed column could take out half the estate through auto-exposed Recipe schemasCategory fields with far too many distinct values all through the low-scoring datasetsNo defined access boundary for agent reads
Reference teardown · the method behind the $2,490 offer

A 64-step production dashboard cut to half the JSON, render-identical

Result
JSON 2,063 KB → 966 KB (-53%) · page-one steps 64 → 40 (-37%)
Visual diff
Zero, confirmed by rendering the exported JSON in our reference environment and comparing widget by widget
Method
Mechanical strip (dead steps, no-op filters, broadcastFacet), then step-family merges
Turnaround
48 hours from JSON export, no org access required
Start with a $2,490 teardown →The lowest-risk way to evaluate us on your own dashboard.