01 — The M1 Wall¶
Failure mode: Rung 1 (the first shipped project — wc clone, P0.1) is not merged, tagged, and pushed to a public repo by the end of Month 1 (Week 4).
Probability: 25%
This is the classic “returning developer stalls before liftoff” pattern. The setup work (toolchain, editor, CMake, warnings-as-errors) feels productive but produces no shipped artifact. Two weeks pass. Then three. Then Raghul is doing “one more tutorial video” and it is Week 5, no rung 1, and the sprint retro is a lie.
Why It Happens¶
Toolchain rabbit hole. Fighting Clang vs GCC on macOS, sanitizer setup,
compile_commands.json, LSP integration. Every hour on tooling is an hour not shipping.Tutorial hell. Cherno’s YouTube playlist is 118 episodes. LearnCpp.com is 27 chapters. Both feel like “learning” but neither ships code.
Perfectionism. Wants the
wcclone to havemmap,wchar_t, benchmarks vs GNU coreutils, blog post, all before pushing. None of it ships.The two-year gap. Everything feels foreign. Sitting down to write a
main()from scratch reveals gaps. Retreating to tutorials feels safer than facing them.
Early Warning Signals (fire within 1–2 weeks)¶
Any two of these within a rolling 14-day window means a signal has fired:
No
hello.cppcompiled by end of W1. Not “started reading about CMake” — actually compiled and run a hello world by Day 7.Skipped 3+ daily practices (
../13_discipline/04_daily_practice.md) in a single week. The 30-min daily is the pulse; if it dies, the sprint dies.Cherno / LearnCpp / cppreference tabs open for >2 hours with no code written. Tutorial time > code time is the tell.
Zero commits to the
wcrepo by end of W2.Lab notebook (
../13_discipline/02_lab_notebook.md) is empty or has fewer than 4 entries by end of W2.
Mitigation (execute the moment 2 signals fire)¶
Cut scope, hard. Pair down Phase 0 to only P0.1 — the wc clone. Drop P0.2 (small dictionary CLI) and P0.3 (mini-http-echo) entirely for M1. They come back in M2 if there’s slack; if not, they don’t come back at all.
Ship a shitty wc first, polish later. Definition of shipped: reads stdin or a file path, counts lines/words/bytes, returns matching output for wc -lwc README.md. That’s it. No mmap. No Unicode. No benchmarks. Push to GitHub with a 3-line README. Ship on W3, polish on W4.
Kill tutorials for the rest of M1. Cherno stays closed. cppreference is a lookup tool, not a linear reader. LearnCpp is done after Ch. 1–6 (through basic functions/loops); the rest is a reference from now on.
Force the compile. Every daily practice must produce a compiled .cpp file. Not “read about”. Not “watched”. Compiled and run. Log it in the lab notebook with date | file | ran? y/n.
Pair with the returning-dev pitfalls file. Re-read ../02_prerequisites/03_common_pitfalls_returning_dev.md from Phase 0. The compiler-friction section will save 6 hours of linker-error thrashing.
Escalation Trigger¶
If no rung 1 is shipped by end of W6 (two weeks past target):
Full stop for 2 weeks. No C++ during this pause. Read, walk, sleep.
On the return, restart Phase 0 with further reduced scope: 4 drills/week instead of 5, one project only, 8-hour weeks instead of 10–15.
If the reduced-scope Phase 0 also does not ship a rung 1 by an additional 4 weeks, the roadmap needs a full re-plan — not because Raghul failed, but because the plan was calibrated wrong. Re-plan is a 13→18 month stretch, not a quit.
What Success Looks Like at End of M1¶
wcclone public on GitHub, 1 tag, 1-page README.Lab notebook has ≥ 20 entries.
At least one benchmark run (even if it’s ugly) comparing
./wcagainst/usr/bin/wcon a 100 MB file.Streak counter (daily practice) reads ≥ 25 days out of 30.
If those four exist, M1 succeeded regardless of how it felt. Feelings lie in M1. Artifacts don’t.
Nav: ← README · → 02_the_AI_rebound.md