[Placeholder case note] Every retrospective like this one should be grounded in a specific, real project. This post is structured the way a real one will read once it's written from an actual shipped build — treat the lessons below as the shape of the post, not yet a verified account.
The plan was reasonable. The scope crept anyway.
The original MVP scope was: auth, one core workflow, and a billing wall. Four weeks in, the plan had quietly grown to include a permissions system, three dashboard views, and a settings page with options nobody had asked for. None of it was wrong to build eventually — it was wrong to build before a single real user had used the core workflow.
What I'd cut earlier
- Team roles beyond owner/member. A granular permissions system is easy to justify and expensive to build. Two roles is enough until a paying customer asks for more.
- A polished settings page. A plain form with unstyled defaults works fine for the first ten users. Time spent polishing settings is time not spent on the feature people are paying for.
- Configurable anything. Every "let the user customize X" decision multiplies test surface. Hard-code sensible defaults until someone asks for the knob.
What was worth the time upfront
- Getting the data model organization-scoped from day one. This is the one category of decision that's genuinely expensive to walk back later, unlike UI polish.
- Wiring Stripe webhooks correctly the first time. Billing bugs are the kind of bug that costs trust, not just an afternoon of debugging.
- A boring, working deploy pipeline. Nothing fancy — push to main, deploy on Vercel — but reliable enough that shipping a fix never felt risky.
The actual lesson
Most of what slowed the build down wasn't technical difficulty — it was unclear scope boundaries. The fix wasn't a better technical decision, it was a firmer answer to "does this need to exist before the first user sees the product?" Nearly everything that didn't clear that bar could wait.
[Add real project name, timeline, and outcome once this case note is written from an actual shipped build.]