Failure Mode 01 — Tutorial Hell & Paralysis

Probability: 65%


What It Is

Tutorial Hell is the state of perpetual consumption without production. You are always learning. You are never building. Your GitHub is empty. Your understanding is shallow because it was never tested against reality — only against multiple-choice questions and fill-in-the-blank notebooks.

It is the most common failure mode in self-taught ML because the supply of high-quality content is infinite, the feedback loop is comfortable (videos are frictionless), and the act of building is uncomfortable (debugging is not).

The paralysis variant is subtler: you are not consuming passively — you are frozen before building because “you don’t know enough yet.” This is a rationalization. You will never feel ready. The readiness comes from building, not from more studying.


Why This Happens in ML Specifically

ML has an unusually seductive content ecosystem. Andrej Karpathy’s lectures are genuinely excellent. Fast.ai is genuinely good pedagogy. DeepLearning.AI is polished and comprehensive. These are not the problem. The problem is using them as a destination rather than a runway.

Completing a course feels like progress. Closing a notebook with all cells run feels like understanding. Neither is learning in the durable sense — because neither was tested against a problem you defined, with stakes you owned, with an output you shipped.


What It Looks Like at the Failure Point

At the end of Month 2, you have:

  • Completed (or started) 3+ courses

  • Watched 40+ hours of video content

  • Zero original projects committed to GitHub

  • Explanation of backpropagation that requires a prompt (“can you give me a hint?”)

  • A vague sense of familiarity with ML concepts but inability to implement any from scratch

This is tutorial hell. You are 65% of the way to quitting without knowing it.


Symptoms

Symptom

Description

Empty GitHub after Sprint 2

No original code in any public or private repository

“I’ll build after I finish this course”

Used more than once as a reason to delay building

Can recognize code but can’t write it

Can follow along with a notebook but can’t start from blank file

Comfort with passive media

Prefer video or reading over coding by a wide margin

High course completion, low implementation

Certificates collected; nothing shipped

“I don’t know enough yet to build X”

Used to justify not starting a defined project from the sprint plan


Early Warning Signals

These appear before the failure state, typically in Sprint 1–2:

  1. Day 10: You have watched 8 hours of content and written fewer than 100 lines of original code.

  2. Day 14 (Sprint 1 end): Sprint deliverable is “I finished the course section” rather than a committed artifact.

  3. Week 3: You have re-watched a lecture you already watched, rather than attempting an implementation.

  4. Week 4: Your lab notebook entries describe what you watched, not what you predicted, tested, and observed.

  5. Sprint 2 review: You cannot implement the previous sprint’s core concept without referencing course material.

If you see 2 or more of these: activate the mitigation protocol immediately.


Mitigation

The 1:1 Rule — Non-Negotiable

For every 1 hour of content consumed, 1 hour of code must be written.

This is not a ratio you can bank. If you watch 2 hours of video today, 2 hours of coding must happen before the next video begins. Not this weekend. Not next sprint. Before the next video.

What counts as “code written”:

  • ✅ Original implementation from a blank file

  • ✅ Modification of an existing codebase with a specific goal

  • ✅ Debugging a broken implementation

  • ✅ Writing unit tests for your own code

  • ✅ Reproducing a paper result from scratch

What does NOT count:

  • ❌ Running someone else’s notebook

  • ❌ Following along with a tutorial step-by-step

  • ❌ Copy-pasting from documentation

The “Blank File Test” — Weekly

Every week, open a blank .py file and implement the core concept from the week’s learning without referencing any tutorial.

If you cannot do this, you did not learn the concept. You recognized it. Recognition is not the same as understanding.

Blank file tests by phase:

  • Month 1: Implement gradient descent for linear regression from scratch (no sklearn, no autograd)

  • Month 2: Implement cross-entropy loss and its backward pass

  • Month 3: Implement a two-layer MLP forward and backward pass in numpy

  • Month 4: Implement attention mechanism from scratch

  • Month 5: Train a character-level language model from scratch

The “Ship Something Small” Rule

Every sprint must end with at least one committed artifact. It does not need to be impressive.

Acceptable artifacts:

  • A working implementation of one algorithm

  • A reproducible experiment with written results

  • A blog post explaining one concept

  • A cleaned dataset with documented preprocessing

Not acceptable:

  • “I finished reading the paper”

  • “I completed Module 4”

  • “I understand the concept now”


Escalation Trigger

If Sprint 3 ends with fewer than 3 committed projects on GitHub (public or private), invoke the reset protocol immediately.

The reset protocol is in 09_summary_and_reset_protocol.md.

At the reset: cut content consumption to zero for one sprint. Build only. The content will still be there in two weeks.


The Honest Check

Ask yourself at the end of every sprint:

“If someone asked me to demonstrate this sprint’s core concept right now — no notes, no internet — could I do it?”

If the answer is no: you have been in tutorial hell. The good news: you can exit at any time. The exit is a blank file and 60 minutes of discomfort.