Your First Side Project
From Picking an Idea to Launch
90% of people get stuck on "I don't know what to make", and the other 10% get stuck on "scoped it way too big and never finished". This breaks it all down ─ 5 rules for picking an idea, how to cut scope, a 4-week launch timeline, and the 7 traps you'll fall into. For career-changers, students, side-hustlers, and indie hackers.
Why the first project is so hard
There are 3 reasons:
- No constraints → overthinking ─ nobody's forcing you to build X, so you want to build everything and spend 3 months stuck on "what should I make"
- No reference points → can't cut scope ─ you decide to build an "Instagram clone" and underestimate the work by 5x
- No community → one block and you're done ─ you debug all night with nothing to show, and you quit the next day
What this post is here to fix isn't "writing code" ─ it's "picking the right idea + cutting the right scope + sticking it out to the finish".
The 5 rules for picking an idea
01 You'd use it yourself
This is the most important rule, and 80% of people ignore it.
Build something you'd actually use yourself. The upside:
- You have real motivation (when you see a bug you want to fix it, instead of thinking "eh, whatever")
- You know how the features should work (you ARE the user)
- When it's done, someone actually uses it ─ at least you
Build something you "think is cool but would never use yourself" and you'll abandon it halfway 99% of the time.
02 Solve 1 specific pain point, not 10
Wrong: "I want to build a productivity tool"
Right: "I want to build a little tool that automatically turns my weekly commits into a status report"
The more specific, the better. The more specific, the better. The more specific, the better. Worth saying 3 times.
03 You can finish it in 4 weeks
If it takes more than 4 weeks, you'll quit 99% of the time.
So ─ no matter how cool your idea is, cut it down to the smallest version you can finish in 4 weeks.
Want to build a "Discord bot that auto-organizes meeting notes + AI summaries + multi-language support + export to Notion + Slack integration"? Cut 4 of them, keep just 1.
Add the rest after you launch.
04 It involves 1-2 things you know + 1 thing you want to learn
Pure practice of stuff you already know → no growth, boring.
Everything brand new → you get stuck and quit.
2 things you know + 1 new thing → the perfect ratio.
For example: you know React + Node and want to learn "AI API integration" ─ build a little tool that uses the OpenAI / Claude API, spending 80% of your time on what you know and 20% learning the new thing.
05 It can become "something you're proud to put on your resume"
This rule decides whether your project is "practice" or an "asset".
A resume-worthy project:
- Can be visited in a browser (not just screenshots)
- Has a README that explains "why I designed it this way"
- Lets a stranger understand what it does in 30 seconds
A "demo that only runs on your own machine" ─ that's practice, not an asset.
20 ideas that are great for a first project
If you have no idea at all, pick from these 20:
① Personal expense-tracking web app
Log income and spending, categorize, monthly report. The classic CRUD exercise.
② Your own link-in-bio page
A personal page with your resume / projects / social links. Practice frontend + deployment.
③ Countdown dashboard
Track a few dates that matter to you ─ birthdays, deadlines, anniversaries. Practice state management.
④ Pomodoro / focus timer tool
Add the features you actually want (music / logging / stats). Practice time APIs.
⑤ Personal RSS reader
Pull in the blogs you read regularly and organize them into one feed. Practice scraping + scheduling.
⑥ Resume generator
Fill out a form → generate a clean PDF resume. Practice forms + PDF generation.
⑦ Markdown blog (no framework, write it yourself)
Publish your learning notes. Practice dynamic routing + Markdown rendering.
⑧ To-do + Pomodoro integration
Pick a todo, start the timer, check it off when done. Practice combining several small tools.
⑨ Habit Tracker
Track the habits you want to build and see your streaks. Practice date handling.
⑩ Discord / Telegram bot
Send scheduled messages, respond to commands, integrate APIs. Practice webhooks + scheduling.
⑪ AI writing assistant (using the OpenAI / Claude API)
Enter a topic, AI gives you a draft. Practice API integration + streaming.
⑫ Recipe / restaurant picker
Save restaurants you want to try and randomly pick one. Practice databases + filtering.
⑬ Auto-organize your solved LeetCode problems into a GitHub README
Pull your LeetCode history and generate a summary doc. Practice APIs + doc generation.
⑭ GitHub stats dashboard
Organize your (or a friend's) GitHub activity into clean charts. Practice OAuth + charting.
⑮ Currency / Exchange rate alert
Track exchange rates and email you when they cross X. Practice scheduling + notifications.
⑯ Mini SaaS for a niche audience
Solve a niche problem (photographers finding locations, translators managing clients). Practice the full stack.
⑰ Voice-to-Markdown
Record audio → run it through the Whisper API → get markdown notes. Practice uploads + AI processing.
⑱ Your own URL shortener
Turn long URLs into short ones and track clicks. Practice databases + stats.
⑲ Newsletter platform (for your own use)
Signup form + email sending + logging. Practice SMTP + an admin backend.
⑳ The tedious thing you actually do all the time at work → automate it
This is the most valuable one ─ you understand your own work's pain points better than anyone.
Cutting Scope ─ the 3-step method
Step 1: Write the "perfect version"
First, let yourself dream: "If I had a full year, what would the complete version of this project look like?"
Write it all down ─ no self-censoring, list whatever comes to mind.
Step 2: Find the 1 core feature that "has no meaning without it"
From that list, find the 1 feature where "without it, the whole project is pointless".
Example: the core of an expense-tracking app is "enter a transaction + see your spending total". Without that, it's not an expense tracker.
Everything else (categories, reports, budgets, multi-currency) is nice-to-have.
Step 3: The launch version does only this 1 thing
The first version does only the 1 core feature + a UI that lets people "see what this thing does".
That's your 4-week version.
Everything else ─ add it after launch, and add it only once people are actually using it.
The 4-week launch timeline
Plan + set up the environment
- Lock in the 1 core feature and write a one-sentence description
- Pick your tech stack (suggestion: what you know + 1 new thing)
- Set up the GitHub repo + a draft README
- Get "Hello World" running locally
- Pick your deployment platform (Vercel / Cloudflare / Railway)
Finish the core feature
- The 1 core feature runs locally
- Ugly UI is fine ─ as long as it works
- Commit at least once a day
- Don't get distracted by "while I'm at it, let me also add X"
Deploy + polish the UI
- Deploy to the cloud, accessible via a URL
- Do one pass on the UI ─ it doesn't have to be beautiful, just not scary-ugly
- Write a proper README (use my README template)
- Send it to 3 friends to try and collect feedback
Fix bugs + launch + go public
- Fix the 3 most critical bugs from your friends' feedback
- Write 1 post / Threads / LinkedIn about what you built
- Put the URL on your resume + LinkedIn
- Celebrate ─ you've got your first project you can actually demo
The 7 traps 90% of people fall into
01 Getting stuck on "which framework should I use"
Don't spend a week researching "should I use Next.js or SvelteKit" ─ grab the one you know best and start writing.
The framework for your first project doesn't matter ─ finishing it matters more.
02 Endlessly adding features, never launching
Every "while I'm at it" feature you add pushes your launch +1 week.
Give yourself a mantra: "Launch first, add features later". A project that never launched doesn't exist.
03 Thinking the UI has to be beautiful before you launch
Ugly UI is fine. An ugly version you can demo > a perfect version forever stuck in design.
Recommendation ─ use an off-the-shelf component library like Tailwind UI / shadcn/ui / Mantine. 10 minutes to make the UI look OK.
04 Not writing a README
A GitHub repo with no README = it doesn't exist.
At minimum, write ─ "what this is", "how to run it", "why I built it". 3 paragraphs, 5 minutes of work.
05 Not deploying
"It runs on my machine, let me demo it for you" VS "click the URL and it works" ─ the latter is worth 10x the former.
Vercel / Cloudflare Pages deploys are free and take 5 minutes to set up. No reason not to deploy.
06 No tests + no monitoring
Your first project doesn't need 100% coverage, but at least:
- 1 test (testing the core feature)
- 1 error tracker (Sentry's free tier)
These 2 things take your project from "practice" to an "engineering piece".
07 Finishing it but never going public
Done ≠ over. A project nobody knows about = a dead line on your resume.
After you launch, you absolutely must:
- Write 1 short post (Threads / LinkedIn / Blog)
- Put the URL on your GitHub profile
- Put it on your resume + describe it in one sentence
Public = people can see it = opportunities can find you.
One last reminder
The goal of your first project isn't to be perfect ─ it's to be finished.
Finishing 1 ordinary project > planning 10 great ones.
Once it's done, you'll find the second one goes 3x faster than the first.
Over these 4 weeks, you'll find you've changed ─ not because you learned a new technology, but because "turning an idea into something you can actually demo for the first time" changes how you see yourself.
Once you've built something once, you know you can build it again.
This is an engineer's biggest unfair advantage.
Stuck on picking an idea or cutting scope? Want someone to sanity-check it?
A 30-minute 1-on-1 consult for NT$1,500 ─ tell me your idea, I'll help you cut it down to a version you can finish in 4 weeks and give you concrete tech recommendations.