Nine tracks. Ninety days. Zero to the kind of maker who builds whatever they can imagine.
I've been trying to teach myself to code for two years. I have seven unfinished Udemy courses and a graveyard of YouTube tutorials. I can write a for-loop but I've never built anything real.
Two years of scattered learning is the most common pattern. It's not a talent problem — it's a structure problem. You've been jumping between introductions. Nothing compounds.
So what changes?
A ladder. Nine tracks in a deliberate order: Python first, because everything else depends on it. Then Automation, because that's where Python stops being a toy. Then AI, because that's where the ceiling of what you can build disappears. Each tier unlocks the next. No choices to paralyze you.
9 tracks sounds like a lot. I've never finished anything this long.
That's because you were trying to finish things that took hours at a time. 15 minutes a day for 90 days is 22.5 hours total — less than a long TV series. The trick is never missing two days in a row. Every self-taught learner who finishes the ladder has that same rule.
Why not just learn AI directly? That's what I actually want to build.
You can — for about a week. Then you'll try to build something real and discover that AI agents depend on APIs, which depend on loops and dicts, which depend on Python fundamentals. Everyone who skips ahead comes back. The ladder is the shortcut.
What do I actually build by the end?
Real things you care about. Past learners built: personal AI daily-brief agents, side-project MVPs, automation layers over their own lives, research tools nobody else had. The ladder teaches the skill. What you build with it is yours.
15 minutes. Today.
Today. The people who finish aren't the ones with the best background. They're the ones who start today instead of tomorrow.
Most self-taught learners don't fail because they're not smart enough. They fail because the learning structure they chose doesn't survive contact with real life. 40-hour Udemy courses assume a weekend that never comes. YouTube tutorials teach disconnected concepts. Bootcamps cost $15,000 and demand you drop everything. Between those extremes, most people try something, stall, and quietly give up.
zuzu's 9-track ladder is engineered for the opposite of those patterns. Fifteen minutes a day. One lesson, one code challenge, done. Each day's work compounds on the last. No weekend marathons required. No course completion guilt. Just a ladder that ends — 90 days from now — with you being someone who can build real things.
Every self-taught coder we know has the same regret: wishing they'd taken Python fundamentals more seriously before jumping ahead. The tier everyone wants to skip is the tier that decides whether they finish.
# Month 1, week 3 — a real script you'll actually use
import csv
from collections import Counter
with open("my_expenses.csv") as f:
reader = csv.DictReader(f)
rows = list(reader)
# Group my month by category
categories = Counter()
for row in rows:
amount = float(row["amount"])
categories[row["category"]] += amount
for cat, total in categories.most_common():
bar = "█" * int(total / 50)
print(f"{cat:20} ${total:>7.2f} {bar}")That's week 3 material. It's also a real script that does something useful. The Python series teaches you to write code like this — not in the abstract, but specifically: reading data, looping, grouping, summarizing, printing. Everything downstream depends on it.
What the Python series (beginners → explorers → makers) gives you:
By the end of the Python series, you don't need to look up syntax. That's when you're ready for the next tier.
The second series is where Python stops feeling like "I learned a language" and starts feeling like "I have a superpower." APIs, schedulers, integrations. The moment you realize your code can talk to any service on the internet, the scope of what you can build explodes.
# A daily personal digest — pulls from 4 places, summarizes, emails yourself
import requests
from datetime import datetime
def fetch_news_headlines():
r = requests.get("https://hn.algolia.com/api/v1/search?tags=front_page")
return [h["title"] for h in r.json()["hits"][:5]]
def fetch_weather(city):
r = requests.get(f"https://wttr.in/{city}?format=j1")
return r.json()["current_condition"][0]["weatherDesc"][0]["value"]
def fetch_rss(feed_url, n=3):
import feedparser
return [e.title for e in feedparser.parse(feed_url).entries[:n]]
digest = f"""
Good morning — {datetime.now():%A, %B %d}
Weather in Bengaluru: {fetch_weather("bengaluru")}
Top on Hacker News:
{chr(10).join(f"• {h}" for h in fetch_news_headlines())}
From your favorite blog:
{chr(10).join(f"• {h}" for h in fetch_rss("https://overreacted.io/rss.xml"))}
"""
send_email("you@gmail.com", subject="Daily Brief", body=digest)Schedule it with cron or GitHub Actions. Now every morning at 6am, you get a personal digest that exists because of you. Nobody built a product for it. You did.
What the Automation series unlocks:
The self-taught who finish Automation describe it the same way: "I stopped asking if something was possible. I just built it."
The third series is the part of the ladder where self-taught coders started to pull dramatically ahead of their peers, starting around 2024. Before then, "what you can build alone" had a hard ceiling. Now it doesn't. LLMs are commodity APIs. Agents that do real work are a few hundred lines of careful plumbing. You, alone, with Python and these APIs, can build things that would have required a team in 2022.
# A personal research assistant — reads a topic, finds papers, summarizes
import anthropic
from openai import OpenAI
import arxiv
claude = anthropic.Anthropic()
openai = OpenAI()
def research(topic, n_papers=10):
search = arxiv.Search(query=topic, max_results=n_papers)
papers = list(search.results())
summaries = []
for p in papers:
summary = claude.messages.create(
model="claude-sonnet-4-6",
max_tokens=300,
messages=[{
"role": "user",
"content": f"Summarize this abstract in 3 sentences for someone learning the topic:\n\n{p.summary}",
}],
).content[0].text
summaries.append(f"**{p.title}**\n{summary}\n{p.entry_id}")
return "\n\n---\n\n".join(summaries)
print(research("sparse autoencoders in language models"))On zuzu's Max track, the ai.py and composio.py shims extend this — calling LLMs through your zuzu account without needing an API key, and connecting to 7 real apps (Gmail, Slack, Notion, Calendar, Stripe, GitHub, Linear) so your agents can actually do things, not just summarize.
What AI series graduates build:
Python series → Automation series → AI series
─────────────────── ────────────────────── ────────────────────
Beginners: syntax Beginners: APIs Beginners: LLM calls
Explorers: data Explorers: workflows Explorers: structured output
Makers: small apps Makers: end-to-end Makers: agents + tools
Nine tracks. Each designed to take 10 days of 15-minute sessions. The whole ladder is 90 days from zero to "I can build whatever I can imagine."
Every self-taught learner who completes zuzu's 9-track ladder has the same rule: never miss two days in a row.
Missing one day is fine — life happens. Missing two is how habits die. Everything else — your background, prior exposure, time of day, age, profession — is noise next to that single rule.
The people who finish aren't the ones with the most time, the cleanest workspace, or the best plan. They're the ones who open the app every day. Compound interest handles the rest.
Every self-taught learner who didn't finish has the same story: "I was going to start next week." Next week doesn't come. Tomorrow doesn't come. Today does. Fifteen minutes. One lesson. One challenge. That's it.
Ninety days from today you are either someone who builds things or someone who meant to start. The gap between those two people is exactly the decision you make right now.
Not syntax — just thinking. How would you solve these?
1.You're 30 days into learning Python and get stuck on a concept (list comprehensions, say). What's the highest-leverage move?
2.You've finished the Python series and feel confident. Someone tells you 'just jump to AI, you don't really need automation.' What's the right instinct?
3.You want to prove to yourself you've actually learned — not just completed lessons. What's the best test?
Build real Python step by step — runs right here in your browser.
You've been logging your daily learning sessions. You have a list of session dicts. Each session has a "date" string in "YYYY-MM-DD" format and a "minutes" integer. Write a function `streak_stats(sessions)` that returns a dict with: - "total_minutes": sum of all minutes - "days_practiced": number of unique dates in the sessions - "longest_day": the date string with the most total minutes across sessions that day (if ties, first encountered) - "avg_minutes_per_day": total_minutes / days_practiced, rounded to 2 decimal places If sessions is empty, return all zeros and longest_day as None.
# streak_stats([{"date":"2026-04-01","minutes":15},{"date":"2026-04-02","minutes":20},{"date":"2026-04-02","minutes":10}])
{
"total_minutes": 45,
"days_practiced": 2,
"longest_day": "2026-04-02",
"avg_minutes_per_day": 22.5
}Start with the free Python track. No credit card required.