04 — Daily Practice

The 30-minute floor. No zero days. Ever.

The single most important rule in this entire roadmap is not “study 3 hours a day.” You cannot study 3 hours a day for 13 months. You have a full-time job, a family, and a life that does not pause for your career plans. The rule is much smaller and much stricter:

Every single day, something ships.

One commit. One paragraph of notes. One leetcode problem. One benchmark run. One re-read of yesterday’s code. Anything. But something. The zero day — the day where nothing at all happens — is the enemy. Two zero days become five. Five zero days become a lost sprint. A lost sprint becomes “I fell off the plan.” The plan is broken. This is how every 13-month plan dies.

One day off per week is scheduled and holy (see 08_health_burnout.md). That is not a zero day. That is a rest day. The distinction is total.


The Daily 30-Minute Block

On a normal weekday, block 30 minutes. Ideally the same 30 minutes every day — the calendar is more reliable than motivation. The Zoho work pattern for most engineers in Chennai puts you home by 8-9 PM. Try 9:30-10:00 PM, or 6:00-6:30 AM if you are a morning person. Pick one, stick to it for a full sprint, then adjust if it isn’t working.

The 30 minutes has three parts:

(a) Write one program by hand — 20 minutes

Depending on the current phase:

  • M1-M2 (Phases 01-02): One program from the 50-programs challenge, OR one LeetCode easy/medium. Typed by hand. No AI. No Copilot.

  • M3-M6 (Phases 03-06): One small implementation of the current topic — a builder pattern class, a stream pipeline, a custom Comparator, a small concurrent producer-consumer.

  • M7-M9 (Phases 07-09): One feature of the current project, or one small extraction/refactor.

  • M10-M13 (Phases 10-12): One capstone commit, one study question hand-solved, one blog paragraph.

The program does not have to be new. Rewriting yesterday’s program from memory is a great use of the block. “I already know how to do this” is the moment before you find out you don’t.

(b) Read one short passage — 5 minutes

One page of Effective Java (Bloch). One page of Java Concurrency in Practice (Goetz). One JEP summary from openjdk.org. One paragraph of an Aleksey Shipilëv blog post.

Short. Not a chapter. Not a video. A single dense passage. Read, close, walk away. If it stuck, it stuck. If it didn’t, tomorrow will bring another passage.

(c) Commit something — 5 minutes

Git commit. Push. That is it.

The commit is the proof-of-work. Empty commits are cheating. Even a single-line typo fix in a NOTES.md counts, but there must be a real change with a real message. Public repo preferred (see 05_teach_to_learn.md for why).

If you did nothing else today, at minimum you did this.


The “No Zero Days” Rule In Detail

A zero day is a day where the commit did not happen. That is the operational definition. The rule has three tiers:

Tier 1 — Full session (30-90 min): default. Aim for this ~5 weekdays a week.

Tier 2 — Minimum viable day (5-10 min): you had a bad day. Long meeting. Sick. Late dinner. Fine. Open the terminal, do one of the following:

  • Commit a single-line change to a NOTES file

  • Read one page of Effective Java, tweet or note the one thing you learned

  • Solve one LeetCode easy in under 10 minutes

  • Run git log --since=yesterday and read yesterday’s code

Tier 3 — The scheduled sabbath: one day per week, completely off. Not a zero day — a rest day. Track it explicitly in your log (“Sabbath: 2026-07-05”) so you know the difference.

Anything outside these three tiers — that is, a day where you were not sick, not on sabbath, and did not do even Tier 2 — is a zero day. Log it as such. Zero days are not shameful. They are data. If you have 3+ zero days in a sprint, that is a signal, and you go look at 06_failure_modes.md.


The Deep Work Session (3+ hours)

Weekends and occasional weekday nights will give you longer blocks. These are precious and easy to waste. Template for a deep session:

## Deep Work Session — {date}, {planned_duration} hrs

### One goal (specific, checkable)
> …

### Warm-up (15 min)
- Re-read yesterday's code / notes
- Write today's prediction (see 02_lab_notebook.md)

### Core work (main block, 90-120 min)
- Timer on. Phone in another room. Notifications off.
- One goal, no context switching.

### Break (15-20 min)
- Walk. Not doom-scroll. Not YouTube. Actually stand up.

### Second block (60-90 min)
- Continue, or switch to writing (blog post, notes)

### Wrap-up (15 min)
- Commit
- Update sprint file
- Write tomorrow's first-hour hook ("When I sit down tomorrow, I will …")

The wrap-up matters more than most people realize. If you leave a session with a clear next step written down, tomorrow’s warm-up is easy. If you leave without one, tomorrow starts with 20 minutes of “where was I?” and you have burned 20 minutes of a 30-minute daily block.

Deep session rules

  • Maximum two per week. More than that and you burn out. This is a marathon, not a sprint.

  • Phone in another room. Not on silent. Not face-down. Another room. Or airplane mode with WhatsApp force-quit.

  • Timer visible. Pomodoro app or physical timer. Deep work is bounded work.

  • Snacks and water beforehand. You cannot deep-work while hungry.


The Session Log

Keep a simple text log. 13_MONTH_ROADMAP/13_discipline/log/DAILY.md or similar. Format:

2026-07-14  T1  50m   Programs: FizzBuzz, PalindromeCheck; Effective Java p.12
2026-07-15  T2  10m   Committed typo fix to NOTES.md, read JEP 444
2026-07-16  T1  40m   LeetCode: Two Sum, Valid Parentheses
2026-07-17  T3  —     Sabbath
2026-07-18  DW  180m  Concurrency chapter 2 + producer-consumer implementation
2026-07-19  ZERO       (skipped — late release call at work)
2026-07-20  T1  35m   Refactored producer-consumer with virtual threads

One line a day. Tier (T1/T2/T3/DW/ZERO), duration, one-sentence summary. That’s it.

Weekly review: at the end of the week, count tiers. Target: ≥ 4 T1, ≤ 2 T2, 1 T3, ≤ 1 ZERO. If you have more zero days than sabbath days in a week, look at the failure modes file.


The First 30 Days Are The Hardest

The habit does not exist yet. Your brain will offer excellent reasons to skip. “I’ll do double tomorrow.” “I already know this.” “I’m too tired.” “It’s just one day.”

These are all lies your brain tells during month one. After 30 consecutive days, the habit exists and the reasons quiet down. Before that, treat the 30 minutes as non-negotiable in the same way you treat brushing your teeth. You do not skip brushing your teeth because you “already know how.”


The Failure Recovery

If you go three days without a commit, the recovery is not “code for six hours to catch up.” That will burn you out and make you skip the next three days too. The recovery is:

  1. Open the log. Write down the zero days honestly.

  2. Do a Tier 2 today. Just Tier 2. One commit. That’s it.

  3. Tomorrow, do a Tier 1.

  4. Do not “make up” the lost time. It is gone. Move on.

The streak is not the point. The habit is. A streak of 200 broken by 5 zero days followed by a streak of 500 is a better outcome than a streak of 300 followed by giving up entirely because “the streak is broken.”


Next: 05_teach_to_learn.md Previous: 03_benchmark_hygiene.md