Make

How to Finish a Small App

A finished number-guessing game beats an unfinished grand design. Finishing is slicing the work, not talent.

Why "Finishing" Matters

Copying code from a book or tutorial and actually completing an app yourself are very different skills. Finishing requires: the judgment to narrow down features, the persistence to debug on your own, and the decisiveness to call it done. Once you've finished even one thing, you develop the confidence "I can make it to the end," which makes it much easier to keep going.

5 Steps to Completion

Finish a "Todo List" in 2 weeks — detailed schedule 30 min/day × 14 days ≈ 7 hours. A realistic pace to ship one app. Day Task Completion Day 1–2 Sketch screen and features on paper (only 3: add, display, done) Build a skeleton page in HTML 10% Day 3–5 Add button + input, display tasks in a list JavaScript array push, innerHTML to display 40% Day 6–8 Add "done" checkbox and delete button Save to localStorage (survives page reload) 65% Day 9–10 Style with CSS (colors, spacing, font) Check it doesn't break on mobile 85% Day 11–12 Use it yourself for a day, fix bugs (testing) Does it break on edge cases (empty input, rapid tapping)? 95% Day 13–14 Write README.md, publish to GitHub, show a family member The day you announced "I'll show the family in 2 weeks" at the start 100% (Done!) ▶ Key: limit features to 3, commit 30 min daily, announce the deadline up front
Fig 1: 2-week schedule to finish a Todo list. 30 minutes a day for 14 days is enough to ship a working app.

① Idea: Start from a personal inconvenience

You don't need to aim for "an app that changes the world." Choosing something that solves a real annoyance in your daily life keeps motivation going all the way to the finish line. Examples: a todo list for homework deadlines, a pocket-money tracker, a flashcard app for vocabulary, or a page that suggests what to wear based on today's weather. Build it for yourself first, not for anyone else.

② MVP: Cut 90% of the features

The most common trap for beginners is "too many features." A todo list could have login, notifications, sharing with friends, and tag categories—but the first version only needs "add a task, display the list, and mark as done." Add the rest after it's working. Deciding on the "minimum that counts as done" up front is the most important trick to actually finishing.

③ Code: Write a little every day

Writing every day for 30 minutes beats a 10-hour session on the weekend. The reason is simple: if you skip days, the cost of remembering where you left off is too high. A 1–2 week sprint works particularly well.

④ Test: Use it yourself hard

"The code runs" isn't the finish line. Actually using it for a day reveals bugs from unexpected interactions and visual glitches. Polish it until "I can use this every day" and the quality improves dramatically.

⑤ Publish: Show it to someone

Once you've shown it to family or a friend, it's done. Publish it to GitHub, host it on a free server and send the URL, or record the screen and post it somewhere—all count. "Showing someone" creates just enough pressure for that final polish.

"Done" doesn't mean "all the features I dreamed of are included." It means "the original goal is achievable." For a todo list: you can add tasks, view the list, and mark tasks done. Those three things working = version 1. The design tweaks and login system can wait for version 2.

If you get lost mid-project, write your README: "what it does," "how to use it," "what it can't do yet." Putting it in words separates "do this now" from "put off until later." Having a README also makes it much easier to explain the project when showing it to others.

Systems to Prevent Giving Up

"Never-ending" vs "done in 2 weeks" — the difference is feature count Same todo list, very different outcome based on how many features you start with × Never-finishing todo list (10 features) □ Add, display, and mark tasks done □ User registration and login □ Password reset □ Tags, categories, and priority levels □ Due dates and repeat settings □ Push and email notifications □ Share with friends, add comments □ Dark mode and theme switching → Half a year later, still nothing working ○ Done-in-2-weeks todo list (3 features) ✓ Feature 1: Add a task Input field + add button → push to array ✓ Feature 2: See all tasks in a list Display array with innerHTML ✓ Feature 3: Mark task done (strikethrough) Checkbox → CSS line-through ✗ Save for version 2.0 Login, tags, notifications Friend sharing, themes, repeats → 2 weeks later: working app + real usage experience
Fig 2: Never-finishing vs done-in-2-weeks. Limit to 3 features first; implement the rest in version 2.0.

Quitting doesn't happen because motivation disappears—it happens when "I don't know what to do next." Set a deadline and announce it, keep the feature set small, and log your progress every day. Set up just these three things from the start and your completion rate goes up dramatically.

Common Pitfalls

Three traps in your first "finish"
  • Losing confidence when you see impressive apps online. For a first version, "works for me" is 100 points.
  • Continuously adding features and never finishing. Complete it first, then add features—that way your "completed" count grows.
  • Moving on to the next project without showing anyone. Show family, friends, or post it somewhere before moving on.

How Will This Help Later?

When applying for university or jobs, "do you have a finished project?" is an important factor. Hiring people look for "the experience of taking something from zero to done yourself" more than code complexity or volume. Having 3–5 small finished projects on GitHub is already a solid portfolio in the tech world.

Multiple small finished projects also let you see your own growth. First one: just working. Second: design polished too. Third: data persistence added. Gradually increasing the difficulty is a more effective learning approach than attempting one grand project that stalls.

What You Can Do Today

Today: ship the smallest version
  1. Write the idea in one sentence
  2. Define the smallest loop: input → judge → show
  3. Save it with a real filename

Summary

In programming learning, the people who grow the most are those who accumulate "finished" experiences. Limit features to 3, finish in a short window, and show it to family or friends. Each time you complete this small cycle, your confidence and skill stack up together. Instead of trying to build something impressive, starting with "something small that you'll actually use" is the key to lasting progress.

Check Which path actually finishes?