Open this lesson in your favourite AI. It'll walk you through the why, explain the demo, and quiz you on the try-it list.
The thing nobody tells you at 0 users is that every novel piece of infrastructure you adopt is a tax you pay every week for the rest of the company's life. Postgres, nginx, Redis, S3 — these are 'boring' because every problem you'll hit has been hit by ten thousand teams before you, with a StackOverflow answer waiting. CockroachDB, ScyllaDB, Temporal, FoundationDB — each of these has a real reason to exist, but most of those reasons start above 1M users. Picking boring tech at Day 0 means you spend your innovation budget on the product, not on debugging a database your future self has never used.
Dan McKinley's 'choose boring technology' essay names the rule: a startup should have an 'innovation token' budget of about three. Spend one on a novel database, one on a novel language, and one on a novel deployment model — you've spent them all on infrastructure and have nothing left for product. Most successful B2B SaaS companies at the 100k-user mark are running Postgres + Redis + a monolith in $LANGUAGE_THEIR_FOUNDERS_KNEW. The boring choice is not 'cheap' or 'lazy' — it's deliberately preserving your innovation budget.
Use these three in order. Each builds on the one before.
Explain Dan McKinley's 'choose boring technology' rule in one paragraph. What's an 'innovation token' and how many do you get?
Walk me through why Postgres can replace 4-5 different special-purpose databases at small scale (search, queue, time-series, cache, KV). What does it lose on each axis, and at what scale does each lose-condition matter?
I'm picking the stack for a B2B SaaS aiming at 100k users in year 2. Help me audit a proposed stack of: Rust + Postgres + Redis + Kafka + Kubernetes + Cockroach. Which choices preserve innovation budget and which burn it? What would you swap?
// Pick boring. A typical "what's running in prod at 100k users" looks like this:
const stack = {
app: "Node.js / Python / Go / Rails — pick what your team writes daily",
db: "Postgres (RDS / Supabase / managed)",
cache: "Redis (managed)",
queue: "Postgres-as-queue OR Redis Streams OR SQS",
storage: "S3-compatible (S3, R2, Spaces)",
cdn: "Cloudflare / Fastly",
webserver: "Caddy / nginx / cloud LB",
observability: "managed (Grafana Cloud, Better Stack, Axiom, SigNoz)",
};
// Anti-stack — each of these costs an innovation token you don't have:
const expensive = {
db: "CockroachDB / FoundationDB at 0 users",
msg: "Kafka 'because we'll need it'",
infra: "Kubernetes for a 1-pod deployment",
lang: "Rust 'because performance' for a CRUD API at 100 rps",
};node main.js