How to keep a side project alive while busy.

•

•

Maintenance Mode Is a Legitimate State

I’ve lost count of how many “productivity gurus” have tried to sell me on a complex system of time-blocking, Notion templates, and ritualistic morning routines to fix my workflow. It’s all nonsense. If you’re looking for a way to master your life through a $20-a-month subscription service, you’re in the wrong place. The reality of learning how to keep a side project alive while busy isn’t about optimizing your sleep cycle or finding the perfect pomodoro timer; it’s about managing the slow, inevitable decay of your own motivation when your day job starts throwing production incidents at you.

I’m not going to give you a roadmap to becoming a “solopreneur” or any other high-octane hype. Instead, I want to talk about the boring, practical mechanics of staying in the game. I’ll share what I’ve learned from a decade of starting things, abandoning them, and eventually figuring out how to actually ship code without burning out. We’ll focus on reducing friction and making sure your project is actually built to survive the weeks when you have zero mental bandwidth left.

Table of Contents

Preventing Side Project Burnout Before the Crash

Preventing Side Project Burnout Before the Crash

The mistake I made early on was treating my side projects like a second job with an infinite backlog. I’d come home from a long day of debugging legacy payment gateways and try to force myself into a high-intensity sprint. That’s a recipe for disaster. You can’t treat your limited free time like a production environment that needs 99.9% uptime. Instead, I’ve learned that scaling back project scope is often the only way to actually finish anything. If your “MVP” requires a distributed microservices architecture and a custom auth provider, you aren’t building a project; you’re building a monument to your own exhaustion.

I also stopped trying to find “perfect” pockets of time. There is no magic window where you have four uninterrupted hours of deep work. Instead, I focus on maintaining momentum with limited time by picking tasks that fit the energy I actually have left at 8 PM. Some nights, that means writing a single unit test or cleaning up a messy README; other nights, I just close the laptop. The goal isn’t to grind until you hit a wall; it’s to make sure you don’t wake up six months later with a graveyard of half-finished repositories and a deep resentment for your own IDE.

Scaling Back Project Scope to Survive Reality

Scaling Back Project Scope to Survive Reality

The biggest mistake I made early in my career—both at work and in my personal repos—was treating every side project like a new startup that needed a microservices architecture and a complete CI/CD pipeline from day one. I’d spend three weeks configuring Kubernetes clusters for a tool that only I was ever going to use. That isn’t engineering; it’s procrastination disguised as progress. If you want to actually finish something, you have to get comfortable with scaling back project scope until the core value proposition is almost embarrassingly simple.

I’ve learned that the goal isn’t to build the “correct” system; it’s to build a system that survives your own schedule. Instead of aiming for a feature-complete product, I now focus on maintaining momentum with limited time by identifying the single most important path. If I can’t write the core logic in a single weekend, the scope is too wide. By stripping away the “nice-to-haves”—the fancy auth providers, the perfect UI components, the telemetry—you leave yourself enough breathing room to actually ship something before you lose interest or your day job decides to throw a massive incident your way.

Tactics for staying in the game

  • Write your “next step” before you close the laptop. I’ve learned the hard way that if I don’t leave myself a specific, tiny instruction—like “fix the type error in the auth middleware”—I’ll spend my entire weekend just trying to remember where I left off.
  • Treat your side project like a low-priority production service. It doesn’t need 99.99% uptime, but it does need a basic heartbeat. Even if it’s just ten minutes of refactoring once a week, it keeps the context from evaporating.
  • Forget the “all-or-nothing” sprint mentality. If you wait for a free Saturday to do a deep dive, you’re going to fail. Real progress happens in the awkward twenty-minute gaps between meetings or while waiting for a build to finish.
  • Build a “kill switch” for features. If a new idea feels like it’s going to require a complete rewrite of your database schema, don’t do it yet. If you can’t implement it with a simple conditional flag, it’s probably too big for your current bandwidth.
  • Accept that your “perfect” architecture is probably wrong. I used to spend weeks over-engineering abstractions for side projects, only to abandon them when work got busy. Just ship the messy version; you can refactor it when you actually have the cycles to do it properly.

Lessons from the wreckage

Stop treating your side project like a second job; if it requires a sprint planning session just to decide what to do on a Tuesday night, you’ve already lost.

Ship the boring stuff first—the authentication, the basic CRUD, the stuff that actually works—because a half-finished, polished UI is just a graveyard for your motivation.

Write down your “why” in a README before you write a single line of code, so when you’re six months deep and exhausted, you actually remember why you bothered starting this in the first place.

The Long Game

Managing side projects via The Long Game.

At the end of the day, keeping a side project alive isn’t about finding a magic window of time that doesn’t exist; it’s about managing your own technical and mental debt. You have to be willing to ruthlessly cut scope when life gets heavy and accept that a minimal, working feature is infinitely better than a massive, broken architecture sitting in a private repo. If you try to treat your side project like a high-growth startup while working a full-time job, you’re just scheduling a systemic failure for yourself. Write the code, ship the small stuff, and keep the documentation decent so you don’t spend three weeks just trying to remember how your own auth logic works when you finally sit down to code again.

I’ve seen plenty of talented engineers abandon great ideas because they treated their hobby like a second job they couldn’t quit. Don’t let that be you. Your side project shouldn’t be another source of production incidents in your personal life; it should be the place where you actually enjoy the process of building. If the progress feels slow, let it be slow. As long as you are shipping something—even if it’s tiny—you are winning. The goal isn’t to reach a perfect launch state by next Tuesday; it’s to make sure that when you finally do reach it, you still actually care about the thing you built.

Frequently Asked Questions

How do I know when I've actually cut too much scope and the project is no longer worth building?

You’ve cut too much when you stop feeling the friction of the problem you’re actually trying to solve. If you’ve stripped away so much complexity that you’re just building a CRUD app for a single table, you aren’t “managing scope”—you’re just writing boilerplate. If the core loop of the project no longer feels worth the effort of a Saturday morning, you haven’t simplified the project; you’ve hollowed out its soul.

What's the realistic way to pick a tech stack that won't become a maintenance nightmare when I only have four hours a week to work on it?

Don’t chase the “new shiny” or try to build a distributed system in Rust just to prove you can. If you only have four hours a week, your biggest enemy isn’t performance; it’s friction. Pick the stack you already know well enough to sleep through. If you have to spend three hours debugging a build tool or a complex ORM configuration, you’ve already lost the week. Use the boring stuff. Boring is predictable, and predictable gets shipped.

How do you actually schedule time for this without it feeling like a second job that's constantly failing?

Stop trying to find “blocks of time” in your calendar. If you treat your side project like a sprint, you’ll burn out by Tuesday. I stopped trying to schedule “deep work” and started looking for the gaps—the thirty minutes after dinner or the hour before the house wakes up. Don’t aim for a second job; aim for small, consistent commits. If it feels like a chore, you’ve over-engineered the schedule. Just show up.

At what point do I stop treating a side project as a learning tool and start treating it like something that actually needs to ship?

The moment you start building features that you know how to build, but you’re only doing it to “feel productive.” If you’re spending three days perfecting a custom authentication wrapper instead of just using a library so you can actually deploy, you’re no longer learning; you’re procrastinating. Stop tinkering with the plumbing once the water is running. Ship the thing, let it break in the wild, and learn from the actual users instead of your own assumptions.

Tomasz Wierzbicki

About Tomasz Wierzbicki

I am not interested in arguing about frameworks. I am interested in why the thing broke at two in the morning and what would have prevented it. Most of what I know came from being wrong in production and writing it down afterwards.