Where they were
The finance team noticed before the data team did. Snowflake spend had roughly doubled in twelve months while the number of dashboards had barely moved. The data team’s honest answer was “we’re not sure” — the bill was one line item, and the warehouse was shared by forty people and a dozen services.
The brief was narrow on purpose: find the money, don’t break anything, six weeks.
What was actually hard
- Attribution. Credits are billed per warehouse; blame is assigned per person. Nobody had joined the two.
- Fear. Every one of the thirty-one scheduled tasks was “probably important.” Turning one off felt like cutting a wire in a bomb.
- Refresh schedules were guesses. Hourly refreshes for tables that a weekly report read once.
What we did
Week 1 — measure. A small Streamlit app over QUERY_HISTORY and WAREHOUSE_METERING_HISTORY showing credits by warehouse, by user, by dbt model, by dashboard. The first version was ugly and it changed the conversation immediately: two BI dashboards on auto-refresh accounted for 18% of spend.
Weeks 2–4 — consolidate and re-schedule.
- Three always-on warehouses became one right-sized warehouse plus a small burst warehouse for the month-end load.
- Auto-suspend from ten minutes to sixty seconds everywhere (the biggest single change).
- 31 scheduled tasks became 9 dynamic tables. Dynamic tables refresh when upstream data changes, on a target lag we set per table, instead of on a timer someone picked in 2023. Tables that fed a weekly report got a twelve-hour lag; tables that fed the customer-facing usage page got five minutes.
Weeks 5–6 — make it stick. Resource monitors with alerts at 75% and 90% of budget, the cost app polished and handed over, and a one-page “before you add a schedule” checklist.
What changed
- −40% monthly credits, measured over the following quarter against the same workload.
- 31 tasks → 9 dynamic tables, each with an explicit freshness target the business agreed to.
- Payback in week 3 — the savings in the first full month covered the engagement.
Nothing was deleted. Every dashboard that existed on day one existed on day forty-two, and most of them were fresher than before.
Representative engagement — details anonymized and generalised.