The most expensive mistake on a young project is not the wrong feature — it's the wrong infrastructure. I have watched solo founders pick Kubernetes because they read a blog post and burn three months on devops they did not need. I have watched teams pick a managed BaaS because it was easy and hit a wall the day they wanted to do anything off-pattern.
My default stack for a new product: Next.js on Vercel, Postgres (Neon or Supabase if I want auth out of the box), and an auth provider I can rip out — Clerk or Auth.js. That is it. It scales further than most projects ever go, the deployment story is one command, and I can run the whole thing locally without three Docker containers.
I deviate from that default for three reasons, and only three. Real-time at scale (websockets, gaming, collaboration) — that is when I bring in something like Liveblocks or self-host. Heavy compute (ML, video, geospatial) — that is when I add a worker layer, often Modal or a Vercel Background Function. Regulatory (HIPAA, PCI) — that is when the cheap path is buying compliance via something like Vanta and using a vetted cloud (AWS via SST or similar).
The five questions I make every founder answer before we ship a stack decision: (1) What's the actual user load in 6 months — be honest. (2) What's the cost ceiling? (3) Who maintains this in two years? (4) What needs to be portable if we change our minds? (5) What does failure look like — and how fast can we recover?
Most founders cannot answer (1) accurately and overshoot. Most engineers cannot accept (2) and over-engineer. The honest version of those answers points at a stack that is smaller, cheaper, and easier to debug than what most teams ship. I default to boring tech until evidence forces me off it.
One more rule: never pick infrastructure during a deadline. The pressure makes you choose the thing that feels safe today, and that thing is rarely the cheapest tomorrow.