You know the feeling.
You have a great idea for a project. You open your code editor. You create main.py. The blinking cursor waits.
And you freeze.
What do you type first? Do you need a class? A function? A variable? Ten minutes later, you’re checking Reddit because the paralyzed feeling is too uncomfortable.
This happens not because you can’t code, but because you’re trying to do two things at once: designing the software and building it.
Professional developers don’t start by writing code. They start by asking questions.
Here is the Five Questions Framework I teach my students to turn any vague idea into a concrete blueprint before writing a single line of Python.
1. WHAT does it do? (The Menu)
Imagine you’re opening a restaurant. Before you buy stoves or hire chefs, you need a menu.
Your “menu” is your feature list. Don’t worry about how to build it yet. Just list what it does.
Example: A Simple Contact Book
- Add new contacts
- View all contacts
- Search by name
- Save to file
2. WHO does the work? (The Staff)
In a restaurant, the host greets you, the chef cooks, and the dishwasher cleans. They have distinct responsibilities.
Group your features into “staff members” or layers.
- User Interface (UI): The “Host”. Displays menus, asks for input.
- Business Logic: The “Chef”. Adds, searches, and deletes contacts.
- Storage: The “Archive Manager”. Saves and loads JSON files.
3. HOW are they connected? (The Kitchen Flow)
The host doesn’t cook the burger. The host hands an order to the chef.
Draw a simple dependency line:UI -> Logic -> Storage
This tells you something critical: The Storage layer doesn’t know the UI exists. This is “Separation of Concerns,” and it prevents your code from becoming spaghetti.
4. WHAT flows between them? (The Dish)
When the host hands an order to the chef, what is written on the ticket?
Decide your data structure now.
- Is a “Contact” a tuple?
("Alice", "555-1234") - Or a dictionary?
{"name": "Alice", "phone": "555-1234"}
Choosing a list of dictionaries now prevents painful refactors later.
5. WHAT operations exist? (The Recipes)
Now, listing the functions becomes easy. You just map the work to the “staff”:
Storage Layer:
load_contacts()save_contacts()
Logic Layer:
add_contact()search_contacts()
UI Layer:
display_menu()get_user_input()
The “Aha” Moment
By answering these five questions, you didn’t write code, but you just designed a full architecture.
When you finally return to main.py, the paralysis is gone. You aren’t “building a contact book.” You’re just implementing load_contacts(). Then display_menu(). Small, manageable tasks.
Stop staring at the cursor. Start asking questions.
This framework is adapted from my upcoming book, Zero to AI Engineer: Python Foundations, where we use it to design everything from CLI tools to AI pipelines.
I share excerpts like this on Substack → https://substack.com/@samuelochaba