Product3 min read

Why most side projects never ship

How I cut scope without cutting the parts that make a first release usable.

I have unfinished repositories and domains attached to ideas I never released. The ideas weren't always bad. Often I made the first version too large to finish in the time I actually had.

A few spare evenings are easy to imagine as a small uninterrupted project. In practice, the context switching and forgotten decisions take a share of those evenings too.

Describe the first useful task

Before choosing the stack, I try to write down what someone should be able to finish in the first version.

For a booking tool, that might be publishing available times and receiving a real booking. It doesn't automatically include team accounts, recurring schedules, calendar synchronization, custom branding, and a reporting dashboard.

Those features may become necessary. Listing them separately makes it possible to ask whether the first intended user needs them now.

If I can't describe a useful first version without all of them, I may be looking at a larger project than my available time permits.

Cut a path through the work

I like to get one task working from beginning to end before filling out the surrounding interface. That exposes missing assumptions early.

Can the input be saved? Can someone find the result again? What happens when they submit twice? Even a plain implementation of that path teaches me more than a finished navigation system with empty pages behind it.

Where possible, I use services and patterns I already know. A side project can be a place to learn a new database or framework, but then learning is part of the scope. It shouldn't be invisible in the schedule.

Set a date that forces a decision

A target date helps me choose what to leave out. It doesn't make unfinished work safe to release.

When the date approaches, I separate optional work from release requirements. A second theme can wait. Access controls, a working payment flow if the product charges money, and a way to recover from common errors cannot simply be wished away.

Sometimes the right response is a smaller private trial. Sometimes it's another week with a specific reason. “Nearly done” isn't a plan unless I can name what's left.

Plan for the work after launch

A product that reaches production also needs somewhere for problems to go. That might be a support email, basic error reporting, backups, and a note explaining how to deploy or restore it.

The amount depends on what the product does. A free calculator and a service storing customer documents don't need the same operation. They do both need an honest promise about what people can rely on.

I also try to decide how much ongoing time I'm willing to give it. A feature that creates a weekly manual task may be a poor fit for a project I can only touch occasionally.

Stopping is a valid outcome

Some projects are worth finishing. Others have already done their job as experiments.

If I no longer want to use the thing, can't find someone who does, and keep postponing the same remaining work, I can archive it deliberately. That is more useful than treating every repository as a debt.

For a project I still want to release, the next step should be concrete enough to finish in the time available: test the import with a real file, remove an optional step, or invite one person to try the working path. If the next task is “finish the app,” I haven't cut the scope far enough.

Want to work together?

I help companies design and build products from the ground up. Let's talk about your project.

Get in touch