04 — Daily Practice

Sprints ship rungs. Daily practice keeps the language alive in your fingers. These are two different things and both matter.

Sprint work is problem-solving — designing, debugging, benchmarking. Daily practice is muscle memory — the small, boring, repeated act of touching C++ syntax so that on the day you need to write template <typename T, std::enable_if_t<std::is_arithmetic_v<T>, int> = 0> in an study, your fingers know it before your brain does.


The 30-minute daily unit

Three components, in order, every day for the first 60 days. Total: ~30 minutes.

1. cppreference page (10 min)

Open cppreference.com. Pick ONE page — not a topic, a single page. Read it slowly. Not skim. Read the parameter table. Read the Notes section. Read the Example.

How to pick:

  • Week 1–2: pick from std:: container pages (vector, array, string_view, unordered_map, optional, variant).

  • Week 3–4: pick from algorithms (std::sort, std::partition, std::transform, std::accumulate, std::ranges::*).

  • Week 5–8: pick from concurrency (std::mutex, std::atomic, std::thread, std::jthread, std::stop_token).

  • Week 9+: adapt to current phase content.

2. Code snippet (15 min)

Open a scratch file: ~/cpp-scratch/YYYY-MM-DD.cpp. Write a new, self-contained 20–40 line program that exercises the concept from the cppreference page. Compile with -Wall -Wextra -Werror -std=c++20. Run. If it warns, fix the warning — not by suppressing.

Do NOT copy the cppreference example. Write your own. If the page was std::partition, write a program that partitions a vector of employees by whether their salary exceeds a threshold. Something you had to think about, not transcribe.

3. Anki-style card (5 min)

Open your Anki deck (or a plain-text flashcards.md if Anki is friction). Add one card. Format:

Q: When does std::vector<T>::push_back invalidate iterators?
A: When size() would exceed capacity() (causing a realloc).
   All existing iterators/references/pointers are invalidated.
   If no realloc, only the past-the-end iterator is invalidated.

Review old cards for 3 minutes at the end. Aim for a rolling deck of 200–400 cards by M6, 500–800 by M13.


The Zoho weekday cadence — pick ONE slot

Do not try to do all three. Pick the one that survives contact with your actual life. Change slot if it stops working — do not skip the day.

Slot A: 6:30 AM – 7:00 AM (morning)

Best for: most engineers. Uninterrupted. Brain fresh. Zoho hasn’t paged you yet. Requires: sleeping by 11 PM. If you cannot, this slot is not for you. Setup the night before: open the scratch file, the cppreference page you’ll read, and the Anki app. Zero decision fatigue at 6:30.

Slot B: 1:00 PM – 1:30 PM (lunch)

Best for: if you have a private-ish desk or a quiet meeting room at Zoho office. Requires: discipline about phone (Slack notifications OFF during this slot). Risk: work meeting slippage, colleagues stopping by. Have a fallback slot.

Slot C: 9:30 PM – 10:00 PM (evening)

Best for: night owls. Also the natural time for someone finishing dinner at 9. Requires: you are not fried from work. If you are, sprint work will suffer more than daily. Risk: “just five more minutes” bleeds to midnight, wrecks tomorrow. Set an alarm at 10:00, phone in another room by 10:15.


The 60-day rule

No days off in the first 60 days. From 2026-07-06 to 2026-09-04. Every single day, even Sunday, even Diwali, even a wedding day — the 30-minute unit happens. Ten minutes if it must, but not zero.

Why: habit formation research puts habit automaticity at ~66 days on average. You want the muscle wired before the M2–M3 valley hits. If daily practice is still willpower-dependent at M3, it will die.

After 60 days: 5 days a week is fine. Take Sundays off. Take Fridays off if you like. Keep the streak-mentality on the 5, not the 7 — sustainability first.


Streak psychology — the Seinfeld calendar

Buy a physical calendar (12-month, one page per month, wall-mountable). Every day you do the 30-minute unit, put a big red X on that day. Do it right there on the wall, not on an app.

Within 2 weeks you have a chain of Xs. Within a month you have a beautiful red line. Don’t break the chain is the game.

Why physical: apps are one Cursor-tab-away from being ignored. A giant wall calendar in your line of sight from your desk is not.


Broken streak — recovery protocol

Streaks will break. The question is not “how do I never break the streak” — the question is “how do I not let one bad day become one bad month.”

Do NOT restart from zero. That is punishment, not process. Instead:

  1. Same day the streak breaks — do one thing. Read one cppreference page for 5 minutes. Do not write code. Just read. That is your recovery act. Streak did not “fully break” — you had a light day.

  2. Next day — two tiny sessions instead of one full one. Morning: 10 min cppreference. Evening: 10 min scratch code (5 lines is fine). Do not try for full 30 min — you’ll fail again.

  3. Day 3 — resume normal cadence. Full 30-min unit.

  4. Do NOT log the miss on the calendar as a failure. Log it with a small mark (dot instead of X) that says “recovery day, half unit done.” Different from missing entirely.

The calendar has three states: X (full), . (half / recovery), blank (missed). Aim for zero blanks in the first 60 days. Some dots are fine.


What NOT to do daily

  • LeetCode. That is sprint work (P2). If you feel the urge, redirect to Anki review.

  • Reading books. Books are for the Saturday morning block. Daily is doing, not reading.

  • YouTube tutorials. Cherno, TheCherno, mCoding are great but they are consumption. Daily is production. One CppCon talk per week on Sunday counts — daily does not.

  • Refactoring old code. That is procrastination in a lab coat.


The M6 rebalancing

At end of M6, daily practice evolves. You’ve spent 6 months on syntax/semantics. Shift to:

  • cppreference → reading a real codebase snippet (5–10 min from LLVM, folly, absl, or Eigen).

  • Scratch snippet → mini-benchmark (write a 30-line micro-benchmark using 03_benchmark_hygiene.md rules).

  • Anki card → kept the same (Anki is forever).

By M9 the daily unit is closer to “1 real-codebase snippet + 1 micro-experiment + Anki” than to “cppreference + scratch + Anki.” Evolve the habit; don’t kill it.


Sanity check — the Friday self-question

Every Friday morning, ask yourself: “Would 22-year-old me be embarrassed by what I wrote this week in the scratch folder?”

If yes, you’re not learning fast enough — raise the cppreference difficulty. If no, you’re not challenging yourself — raise the cppreference difficulty. Only answer: “22-year-old me would have needed to Google half of what I typed this week” — that’s the calibration you want.