"Tech debt is a champagne problem — if you have it, celebrate, because it means people are using your product"
Evidence from the Archive
dbt Labs
dbt Cloud's original scheduler was a naive for-loop over a jobs table — they've since rewritten it multiple times to handle 10M jobs/month for 8,000 companies
Julia Schottenstein's mantra: 'worse is better and tech debt is a champagne problem' — the rewrite cost was real but they only got to incur it because the embarrassing version shipped
Schottenstein's two-mantra framework — 'worse is better and tech debt is a champagne problem' — is grounded in a specific dbt Labs war story. When they launched the cloud scheduler, engineering was embarrassed by it. It was a for-loop over a jobs table: iterate over rows, check if it's time to run each job, move on. No distributed workers, no RabbitMQ, nothing that looks like the scheduler a modern data infrastructure company is supposed to have.
But it worked, and crucially, at launch there was nothing to schedule — they had no users. Building a distributed scheduler at day zero would have been building for scale that didn't exist. dbt has since rewritten the scheduler multiple times as they grew to 8,000 companies and 10M monthly runs. The rewrite cost was real, but it was a cost they only got to incur because the for-loop shipped and taught them what scale problems actually look like.
In Julia's own words: "It was a big old for loop over a big old jobs table. So we would look like is it time for this job to run? Okay. Yes, run this job... And it would just loop over and it's extremely naive and very simple, but it got the job done. And I try to remind the engineers, we would be so lucky to have tech debt because that means people are using the product." (Using the embarrassingly-simple dbt Cloud scheduler as the canonical example of strategic debt.)