Your First Python Project: Pick a Chore, Not a Passion

Three filters that turn an empty folder into a ten-line program you can finish tonight

8 min read

Argued into existence in the Writing Room7 messages · 1 technical catch · 1 mind changed
Your First Python Project: Pick a Chore, Not a Passion

I know what that folder looks like.

It is called 'project' or 'test2' or 'untitled folder', there is nothing in it, and it has been open for eleven minutes.

You finished the tutorials. You can read a for loop now, you know what a function is, you have an AI tool sitting in the next tab that will write basically whatever you ask it for.

Which somehow makes the freeze worse, not better, because the only missing piece left is the thing you are supposed to want.

The advice that makes it worse

"Build something you're passionate about."

I have watched that sentence do real damage. It sounds generous and it is actually an accusation, because it takes a scoping problem and turns it into a verdict about your character.

You sit at the empty folder, nothing arrives, and the conclusion you draw is not "I have not learned how to size a project yet."

The conclusion you draw is "apparently I am not passionate about anything."

You are not short of ideas. I would bet you had four this week and rejected all of them in under a minute each.

You are short of an ending. Every idea you have had is a thing that could keep growing forever, and you can feel that, so you never type the first line.

Look for a chore instead

A chore is something you already do by hand, on some kind of schedule, that has a moment where it is over.

That last part is the whole trick. Chores come pre-scoped. Nobody has to decide what a finished load of laundry looks like.

So here are three filters. Run them over your actual last seven days, not over your ambitions.

Filter one: do you already do it by hand?

Not "would this be useful." Not "would people like this." Do you, personally, already do it, with your hands, on purpose?

If yes, you have evidence the problem exists and you got it for free. You do not have to guess whether anyone wants this, because you want it involuntarily, every week.

There is a second thing you get, and it is bigger. Because you already do it by hand, you already know the rules.

You know that the file always has a blank line at the end. You know that you skip the ones marked draft.

That is a spec, and you built it by accident. When your AI tool asks you a clarifying question, you will be able to answer it, which is not true of the app you invented in the shower.

If you are inventing the need, the tool will invent everything else too, and you will not be able to tell.

Filter two: would you notice within a day if it stopped?

This one is about cadence.

If the chore happens once a year, you get one piece of feedback a year. You will not know whether your thing works until next August, so you will not maintain it, so it does not exist.

A daily chore hands you a result today and again tomorrow, and that is how a beginner build survives long enough to be worth anything.

Things that pass: the list you re-check every morning. The three numbers you copy into the same place every single day.

Things that fail this filter, honestly: a website for your band. A budgeting app. All fine ideas. None of them are today.

Filter three: can you say what finished means in one sentence?

This is the filter that does the actual work.

The sentence has a shape, and the shape is: Done means I do one thing and see one thing.

  • Done means I run one command in my notes folder and every line I marked TODO prints out, with a count at the bottom.
  • Done means I paste a list of amounts and get one number.
  • Done means I open one page and see today's date next to the name of whoever is on the rota.

Now the versions that fail, which are the ones that feel more ambitious and are actually just fog:

  • Done means my notes are organised.
  • Done means I have a dashboard for my finances.
  • Done means the rota is easier.

Read your sentence back and ask one question about it: can I be wrong about whether this happened? "Every line I marked TODO prints out" - you can be wrong about that.

"Organised" is not a state a computer can be in. You will never arrive, so you will never stop, so you will quietly abandon it and add it to the pile of evidence that you cannot finish things.

Why this matters: the sentence is what keeps the AI honest

Here is the part I did not expect. I have asked for both versions of the same chore.

When I asked for "a note-taking app to keep me organised," I got back a Flask project with a database schema, a login route, and three files I had never opened before.

Nothing was wrong with it. I could not tell whether it worked, because I had never said what working meant, so I closed it.

Then I asked with the sentence in the prompt: done means I run one command in this folder and every line I marked TODO prints out with a count at the bottom.

Okay so - this is what came back, and this is the entire program. Two files in one new folder, and all three names matter more than you would like.

So make the folder first: call it 'chores', put it wherever you like, and both files below go in it.

First file: my notes, exactly as ugly as they really are. Save it as notes.txt, written in a plain text editor - the program asks for that name letter for letter, so if you keep notes in markdown and save this one as notes.md, nothing below works:

Monday
called the landlord back, no answer
TODO chase landlord about the boiler
watched half a video about css grid
todo: email Sam the invoice
random thought: the bus app lies

Tuesday
TODO book dentist
finished the python course, felt great, no idea what to build
TODO reply to Priya about the receipts spreadsheet

Second file, in the same folder, saved as todos.py - I put the name in the first line so the two never get separated:

# todos.py
from pathlib import Path

# The chore: read yesterday's notes, pull out the lines I marked TODO.
lines = Path('notes.txt').read_text().splitlines()

todos = []
for line in lines:
    stripped = line.strip()
    # lower() so 'TODO' and 'todo:' both count - I type both
    if stripped.lower().startswith('todo'):
        # cut the marker off the front so the list reads like a list
        todos.append(stripped[4:].lstrip(': ').strip())

for item in todos:
    print('-', item)

print(len(todos), 'open')

Now open your terminal, cd (change directory) into that folder, and run it from inside there:

python3 todos.py

From inside there, literally. 'notes.txt' has no folder in front of it, so Python goes looking for it wherever your terminal currently is - not wherever the script is. Two perfectly named files sitting side by side will still throw FileNotFoundError at line 5 if the terminal happens to be somewhere else, and that is the most common way a beginner loses an hour to a program that was never broken. (On Windows, if 'python3' pops open the Microsoft Store instead of running anything, try 'python todos.py' - that is the usual fix on a python.org install.)

- chase landlord about the boiler
- email Sam the invoice
- book dentist
- reply to Priya about the receipts spreadsheet
4 open

Ten lines that do anything. No install, no account, no framework, Python 3.11 out of the box. (If every line printed with a backslash at the end, the notes were saved as rich text; reopen in plain text and save again.)

And notice everything that is not in there. It does not sort by date. It does not save anything.

It does not have a web page, or colours, or a way to mark something done.

I did not ask for any of that, because none of it is in the sentence.

That is the honesty mechanism. A vague ask gives an AI tool permission to be as ambitious as it likes, and it takes that permission, and you end up maintaining code you cannot read for a goal you never defined.

One sentence about finished puts a wall around the thing. The tool builds up to the wall and stops. So do you.

The sentence is also permission to stop

Beginners do not usually quit at the hard part. They quit at the part where the thing basically works and still feels unfinished, because nobody told them where the finish line was.

Your sentence is the finish line, and you wrote it before you started, which means it cannot move to protect your feelings.

When the TODO lines print, you are done. It is ugly. It is shipped ugly, and shipped ugly is a category I would like you to start living in, because the alternative is not elegant, the alternative is empty.

Tomorrow you can add a second sentence. Done means it also skips anything I marked with an x.

That is a new chore, ten minutes, same file, and this time you are editing working code instead of staring at nothing, which is a completely different feeling and it is the good one.

Final Thought

I nearly opened this with a list of thirty chore ideas. Thirty ideas is thirty new freezes.

So do not take an idea from me. Do this instead, and it takes about ninety seconds.

Think of one thing you did by hand more than once this week. Write it down. Then, underneath, finish this sentence and stop when the sentence stops:

Done means I ______ and ______.

That is the whole assignment. Not a repo, not a plan, not an idea board. One sentence naming the moment you get to stop.

Tomorrow, paste that sentence into your AI tool and ask it for the smallest thing that satisfies it.

The empty folder was never the scary part. The missing ending was. You just wrote one.

Your First Python Project: Pick a Chore, Not a Passion | Vibecodes