Can Ryan pick up Databricks fast? Fast enough to spend $517 of it in one afternoon, then move off it before midnight.
Three days from signup to a governed semantic layer, Genie, and a managed MCP endpoint the agent called 4,800 times. Then the bill for the calls. The card took about $100 past the $400 of trial credits. Everything the agent learned survived the move.
Timeline
| When | What | Note |
|---|---|---|
| Oct 30 | Databricks on AWS chosen. Express trial, $400 of credits, two budget alerts. Estimate: $60 to $90. | Spec 01 step 10: confirm which SKU the managed MCP server bills to. Never closed. |
| Oct 31 am | Signup. Terraform over the workspace. SQL warehouse cut to 2X-Small, five-minute auto-stop. Unity Catalog, service principal, managed MCP preview on. | Serverless egress to OPM blocked at DNS. A card went on to lift it. It did not. The trial's spend cap left with it. |
| Oct 31 midday | 761 MB to a volume in 68 s. One notebook job built ten Delta tables in 2 min 17 s. | Every check matched. |
| Oct 31 pm | Eight semantic views, eight Unity Catalog functions, a Genie space from a JSON file. | Every number matched on the first build. |
| Nov 1 | Eval set, prototype agent, one user test. | Field notes. |
| Nov 2, 13:00 to 19:00 | Smoke, two baselines, six hill-climb iterations. 1,720 graded runs. | The last three hours ran at about $105 an hour. The cost tracker said $2.68. |
| Nov 2, 20:09 | "Your trial credits are exhausted. We will charge your account using the payment information we have on file." | No amount in the email. |
| Nov 2, 20:32 | Spend analysis committed. Decision: tear it down tonight. | The evening estimate read a lagged table and said $197. |
| Nov 2, 21:53 to 22:09 | Everything destroyed. Same views and functions re-expressed on a $14-a-month Postgres. Thirteen-minute ship. Smoke 18 of 20, zero errors, median 10 s against Genie's 44. | Two hours from the email to a passing smoke. |
| Nov 3, 08:20 | Billing export pulled: $517. Service principal, budget, and workspace shell deleted over the account CLI. | Closed. A guard grep in the repo fails any commit that could reach the workspace again. |
challenge/specs/01 to 03-results.md, 06-postgres-and-teardown.md · wiki/analyses/databricks-spend-during-the-climb.md
The bill
| Line | DBU | USD | What |
|---|---|---|---|
| All-purpose serverless | 557 | $418 | Every function call through managed MCP ran on serverless general compute, $0.75 a DBU. |
| Real-time inference | 1,082 | $76 | Genie, billed because the caller was a service principal. |
| SQL warehouse | 32 | $23 | Genie's queries. |
| Jobs | 3 | $1 | Loading the data and building the semantic layer. |
C11 asks how far behind plan each component is for three quarters. The variance function took one component and one quarter, so the agent made about thirty calls a run. Over the climb: 4,445 calls of that function, two thirds from C11, roughly $280. On Postgres the same fan-out costs nothing per call.
system.billing.usage joined to list_prices
Root cause
| Finding | Status |
|---|---|
| The SKU check was never closed. Spec 01 said to confirm on day one what the managed MCP server bills to. The estimate assumed 75 runs. The climb ran 1,720. | Root cause |
| The cost tracker measured model tokens. $2.68. Compute was 150 times that, on another line. | Contributing |
| Adding a card removed the cap. It went on to fix an egress block. It did not fix the block. It turned "stops at $400" into "emails at $400." | Contributing |
| Budget alerts lag a day. $25 and $45 thresholds, email only, up to 24 hours late. | Contributing |
| Genie as a service principal bills per request. Fine at demo volume. Not at eval volume. | Contributing |
Platform torn down that evening, account emptied the next morning. The repo's instructions carry a grep that fails any commit naming a workspace host or key. The data layer is now the cheapest RDS instance class with nothing metered per call, so the harness's token-only cost field is the whole bill.
DECISIONS.md, Platform: RDS Postgres replaces Databricks · AGENTS.md
Eleven platform surfaces in three days, in order
| # | Surface | Learned the hard way |
|---|---|---|
| 1 | Express trial, account budgets | The region is assigned. Alerts lag a day. |
| 2 | Serverless SQL warehouse, Terraform provider | Import what the trial made. The provider cannot create a catalog on default storage. |
| 3 | Unity Catalog grants | Schema-level EXECUTE is the boundary the agent lives inside. |
| 4 | Service principal, OAuth M2M, Managed MCP preview | Tool names are catalog__schema__function. A disabled preview returns HTTP 200 with the error inside. |
| 5 | Serverless egress allowlist | Closed egress is a governance story. It is also why the loader runs on a laptop. |
| 6 | Volumes, files CLI, notebook jobs to Delta | 761 MB in 68 s. Ten tables in 2 min 17 s. |
| 7 | SQL Statement Execution API | How truth values were computed independently of the agent. |
| 8 | Views and table functions as the semantic layer | Re-expressed on Postgres in an evening, same signatures. |
| 9 | Genie space from a file, permissions API | Genie refuses DATE parameters, so the functions take strings. |
| 10 | Genie over MCP, query history, Genie benchmarks | Genie alone scored 8 of 22 against truth, and the agent with functions beat it, so the functions stayed and Genie became a side tool. |
| 11 | system.billing.usage, list_prices, audit log, account billable-usage export | Where the $517 figure came from, the morning after. |
challenge/specs/01-results.md to 03-results.md · DECISIONS.md