Cutting our Snowflake bill without touching a single dashboard
The best compliment my cost project got was silence. Compute spend dropped by more than a third, and not one analyst noticed anything changed. Same dashboards, same numbers, same refresh times. That invisibility was the entire design goal.
The starting point will be familiar to anyone who has inherited a dbt project that grew organically: nearly everything was a full-refresh table. Models rebuilt from all of history, every night, whether 0.1% of rows had changed or none had. This is the correct way to start a project, to be clear. Full refresh is simple, self-healing, and hard to get wrong. It’s just also a subscription that scales with your history instead of your activity, and at some point those curves diverge enough to be worth a look.
I profiled before touching anything, and I’d recommend that order strongly. Snowflake’s query history made it plain: a handful of models accounted for the overwhelming majority of compute, and they were the big event-history tables where each night’s actual new data was a sliver of the total. The dozens of small dimension models cost nearly nothing. Converting those would have been effort spent on optics.
So the work narrowed to the heavy few. Incremental materializations keyed on event timestamps, a late-arrival lookback window, and (this part matters) a scheduled full-refresh fallback, weekly, so any drift between incremental logic and truth gets corrected automatically instead of accumulating forever. Incremental models fail quietly when they fail. The safety net is not optional.
Re-clustering two hot tables to match how queries actually filtered them finished the job.
Two takeaways I’d pass to anyone doing this. First, measure before optimizing, because your intuition about which models are expensive is worse than a fifteen-minute look at query history. Mine was. Second, define success as nobody noticing. Cost work that degrades freshness or breaks a report isn’t optimization, it’s a different product with a lower price. Analysts kept every guarantee they had; the meter just spun slower.
Money quietly not spent every month, compounding. Some of the best engineering leaves no visible trace.