Alex Carter1 min readHow I Ship Side Projects Without Burning Out
A sustainable system for building side projects: scoping, timeboxing, and knowing when something is 'done'.
Side projects are how I learn, but they're also how I burn out. After years of starting things and abandoning them three weeks in, I built a system that actually lets me finish.
Scope Like a Lazer
The number one reason side projects die is scope creep. "I'll just add auth. Oh, and notifications. Maybe a dark mode." Sound familiar?
The one-feature rule
Pick exactly one feature that, if it works, makes the project worth building. Everything else is a distraction until that one feature ships.
A project with one finished feature beats ten projects with ten half-built features every single time.
Timebox Everything
Set a hard deadline before you write a line of code. For side projects, I use these rough budgets:
- Weekend project: 2 days, one narrow feature.
- Month project: 4 weekends, an MVP you'd actually use.
- Quarter project: A real tool others could adopt.
// A real example from my project board
const projects = [
{ name: "shader-playground", budget: "1 weekend", shipped: true },
{ name: "kanban-board", budget: "1 month", shipped: true },
{ name: "the-perfect-app", budget: "forever", shipped: false }, // 👈
];Notice the pattern: bounded projects ship. Open-ended ones don't.
The definition of done
Write your "done" criteria before you start. If you can't describe what "shipped" means in one sentence, the project isn't ready to begin.
Build in Public, but Quietly
Sharing progress creates gentle accountability. But avoid the dopamine trap of chasing likes instead of shipping features.
- Commit to one weekly update, not daily.
- Share what you learned, not just what you built.
Know When to Stop
Some projects teach you what you needed and then they're done — even if they never launch. That's a success, not a failure.
Summary
- Scope to one core feature.
- Timebox with a real deadline.
- Define done before you start.
- Accept that not every project needs to launch.
Ship something small this weekend. You'll be glad you did.
// Comments
Powered by Giscus
Comments are powered by GitHub Discussions. Configure Giscus incomponents/blog/comments.tsxto enable live discussions.
// Related Posts
TypeScript Patterns I Actually Use in Production
Beyond the basics: discriminated unions, branded types, and the patterns that have earned a permanent place in my toolbox.
2026-05-18Getting Started with Next.js 14 App Router
A practical tour of the App Router: server components, layouts, data fetching, and the mental models that make it click.
2026-01-10Mastering React Server Components: A Mental Model
React Server Components sound complicated, but they click once you grok the module boundary. Here's the mental model that finally made it stick.