Introduction

We all have a "Graveyard of Abandoned Projects." That folder on your computer named `new-idea`, `app-v2`, or `test-project` that contains half-finished code, a README with big dreams, and a last modified date from three years ago.

Why do side projects fail? It usually isn't because the coding was too hard. It is because the Scope was too big. We start with "I want to build a To-Do app," and three days later we are researching Kubernetes clusters and real-time WebSocket synchronization.

Professional software engineering isn't just about writing code; it is about Project Management. In this guide, I will show you how to apply engineering discipline to your side projects so you can actually finish them.

Phase 1: The "One Sentence" Rule

Before you write code, define your project in exactly one sentence. If you need commas, conjunctions ("and", "but"), or parentheses, it is too complex.

This sentence is your North Star. Every time you have a new idea ("Let's add photo filters!"), look at the sentence. Does it help schedule playdates? No? Then it goes in the "Version 2" bucket.

Phase 2: Choose Boring Technology

There are two types of side projects:

  1. Learning Projects: The goal is to learn a new tech (e.g., Rust, GraphQL). The product doesn't matter.
  2. Product Projects: The goal is to build a working tool.

If you are building a Product Project, choose boring technology.

Do not try to learn a new language, a new framework, and a new database simultaneously while trying to build a complex app. You will run out of mental energy. If you want to build a finished app, use the stack you already know best. If you know Rails, use Rails. If you know React, use React. Innovation tokens are expensive; spend them wisely.

Phase 3: Data Model First

Don't start by designing the UI. Don't start by writing API endpoints. Start with the data. The data model dictates everything else.

Open a text file and write out your entities in JSON or pseudo-schema.

// User
{
  id: "uuid",
  email: "string",
  password_hash: "string"
}

// Playdate
{
  id: "uuid",
  host_user_id: "uuid",
  location: "string",
  start_time: "timestamp",
  status: "enum(open, full, cancelled)"
}

// RSVP
{
  user_id: "uuid",
  playdate_id: "uuid",
  status: "enum(going, maybe)"
}

By doing this, you realize: "Oh wait, I need a way to link users to playdates." You just designed your database schema in 5 minutes. This is much faster than realizing you missed a relationship after you have already built the UI.

Phase 4: The MVP (Minimum Viable Product) List

Write down every feature you want. Then, be ruthless. Cut it in half. Then cut it in half again.

The "Must Have" vs "Nice to Have" Checklist:

Your MVP should be embarrassing. If it isn't embarrassing, you waited too long to launch.

Phase 5: The Walking Skeleton

We discussed this in the Architecture section, but it is vital here. Don't spend 3 weeks building the perfect Navbar.

Build a "Walking Skeleton"—a tiny implementation of the full stack.

  1. Database exists.
  2. API endpoint `GET /hello` returns JSON.
  3. Frontend displays that JSON.
  4. Deploy it to the internet (Vercel, Netlify, Heroku).

Do this on Day 1. Why? Because deployment is hard. If you wait until the end to deploy, you will find out your database configuration is wrong and you'll get discouraged. If you deploy on Day 1, you get a dopamine hit ("It's live!") and you solve the infrastructure problems early.

Phase 6: Timeboxing

Parkinson's Law states: "Work expands so as to fill the time available for its completion."

If you give yourself "the weekend" to work on it, it will take the weekend. If you give yourself "forever," it will take forever.

Set strict Timeboxes.

The goal is momentum. Perfection kills momentum.

Summary

Side projects are supposed to be fun, but nothing is more fun than actually shipping.

The Engineering Plan:

  1. One Sentence Rule.
  2. Boring Tech Stack.
  3. Data Model First.
  4. Ruthless Feature Cutting.
  5. Deploy Day 1.
  6. Timebox your effort.

Stop treating your side project like a playground and start treating it like a small startup. You are the CTO. Act like it.

← Back to Architecture & Workflow

Back to Home