07 — Exit Criteria and Final State¶
Most learning plans describe where to start. Fewer describe precisely what “done” looks like. That vagueness is a trap — without a concrete target state, you’ll either stop too early (before the skills are real) or never feel like you’re done (because you’re measuring against an imagined expert, not your actual goal). This file names exactly what you should be able to do at the end of Month 9, why that’s enough, and what comes after if you want it.
What “Proficient” Means for This Learner¶
You are not trying to become a Codeforces red or yellow. You are an Applied ML Engineer who wants genuine algorithmic reasoning ability — the kind that makes hard problems interesting instead of threatening, and the kind that makes you a materially better engineer when systems get complex. Here are the behavioral markers that define success. They’re specific and testable.
Behavioral Marker 1: You Don’t Freeze on LeetCode Hard¶
You sit down at a LeetCode Hard problem you’ve never seen. You read the constraints first. You form a hypothesis. You start coding within 5 minutes, even if the direction is uncertain. Freezing — blank page paralysis — is gone.
This is a precondition for everything else, and it’s one of the clearest signals of real progress. It comes from accumulated familiarity with the problem-solving process, not from knowing the solution.
Behavioral Marker 2: Pattern Recognition on ≥ 70% of LeetCode Hards Within 5 Minutes¶
Not solving them — recognizing the algorithmic family. For 7 out of 10 Hard problems you encounter, within the first 5 minutes of reading, you know: is this DP? Graph? Monotonic stack? Binary search on answer? The specific technique may take another 30 minutes to implement correctly. But you’re no longer lost at the start.
This is measurable. Keep a log. Track it.
Behavioral Marker 3: Codeforces Div. 2 A/B Solved in < 20 Minutes Each¶
Codeforces Div. 2 A and B problems are designed to be solvable in 10-20 minutes by their target audience. At M9, these should feel like warmup, not challenge. If they’re taking you 45 minutes, you haven’t reached M9 proficiency yet — keep the timeline honest.
Behavioral Marker 4: Div. 2 C Problems Solved Consistently (≥ 60% Attempt Rate)¶
C problems are where real growth shows. They require a non-obvious insight — usually a greedy observation, a DP formulation, or a graph modeling step that isn’t immediately visible. At ≥ 60% success, you’re past guessing and into genuine pattern application.
This is approximately Codeforces Specialist level (1400–1600 rating), which is the realistic target for this learner at 9 months, 10-15 hours per week. Pupil (1200+) is the minimum floor. Specialist is the realistic ceiling. Expert (1600+) is achievable but requires everything to go right.
Behavioral Marker 5: Occasional Div. 2 D Solves¶
D problems are hard. You won’t solve them consistently. But occasionally — maybe 1 in 4 or 1 in 5 — you’ll see a D problem whose pattern you’ve seen before and you’ll crack it. Those moments are the proof that your foundations are real.
Behavioral Marker 6: Genuine Fun at LeetCode Weekly Contests¶
This one is not soft. It’s a diagnostic. If you’re still experiencing the weekly contest as a stress event — heart rate up, dreading the timer — your practice regimen isn’t working right. Competitive programming is supposed to become enjoyable as you get better. The transition from “ordeal” to “puzzle hunt” is the clearest signal that you’ve internalized the patterns and the process.
If this hasn’t happened by M9, go back to the deliberate practice protocol. Something in the difficulty calibration or the feedback loop is off.
Behavioral Marker 7: You Can Explain Why Any Solution Works¶
Not just that it works — why. “The segment tree is O(log n) per query because the tree has height log n and each query visits at most 2 nodes per level.” “Dijkstra fails on negative edges because a shorter path through a negative edge can invalidate a previously finalized distance, violating the greedy invariant.”
This is the foundation that makes everything else durable. Without it, you’re carrying a collection of patterns you’ll forget. With it, you have a reasoning system that regenerates patterns from first principles.
Your Rating at M9: The Honest Numbers¶
Based on real community data from 2024-2026:
Realistic target: Codeforces Pupil to Specialist (1200–1500)
Strong execution target: Codeforces Specialist (1400–1600)
Exceptional outcome: Codeforces Expert (1600–1800) — achievable, requires consistency through every phase without major gaps
LeetCode weekly contests: Top 15-30% consistently; top 10% on good weeks
These numbers are calibrated for a part-time learner (10-15h/week) with no prior competitive programming background but real engineering experience. Your ML engineering background is actually a mild advantage — you understand systems, complexity tradeoffs, and why correctness matters. You’re not starting from zero in terms of reasoning; you’re starting from zero in terms of contest-specific pattern vocabulary.
Don’t let rating become identity. It’s a lagging indicator of learning, not a definition of your capability. A Specialist who understands why every solution works is a better engineer than an Expert who doesn’t.
The M9 Pitch Sentence¶
If someone at a conference asks what you’ve been doing for the past 9 months:
“I spent 9 months rebuilding CS foundations from scratch — complexity theory through competitive solving — working 10-15 hours a week alongside my job, and shipped 6 public proof-of-work artifacts that demonstrate systematic algorithmic thinking.”
This is not a resume line. It’s a description of what actually happened. It’s concrete, it has a timeframe, it has evidence, and it explains the motivation without sounding defensive. The artifacts are the proof. The rating is a data point.
The 6 Public Proof-of-Work Artifacts¶
By M9, you should have these available publicly (GitHub, a portfolio, or both):
# |
Artifact |
What It Demonstrates |
|---|---|---|
1 |
This repository — documented, organized, complete |
Systematic long-term learning; project ownership |
2 |
Lab notebook with pattern notes |
That you analyzed your failures, not just solved problems |
3 |
Your template library with problem verifications |
Depth of implementation knowledge |
4 |
Contest log (rating trajectory + performance data) |
Honest self-assessment; growth over time |
5 |
2-3 hard problem writeups (your own explanations) |
Communication of algorithmic reasoning |
6 |
A “things I got wrong” document |
Intellectual honesty; the rarest signal |
These don’t need to be polished. They need to be real.
What Comes After M9 (Optional Paths)¶
You’re not done at M9 — you’re equipped. Where you go depends on what called you here in the first place.
Path 1: Deepen Competitive Programming Go for Codeforces Expert (1600+) or start AtCoder contests. The foundation is solid; this is refinement. Time to Codeforces Expert from Specialist: another 3-6 months of focused upsolving and virtual contests. ICPC-style team competition if that appeals to you.
Path 2: System Design and Distributed Systems Your algorithmic reasoning now has enough depth to engage seriously with distributed systems problems — consensus algorithms, consistent hashing, distributed DP, algorithm tradeoffs at scale. Books: Designing Data-Intensive Applications (Kleppmann), then Systems Design Interview Vol. 2 (Xu).
Path 3: ML Systems Optimization The gap you identified — lost to AI code-churning — has a technical answer: being the person who understands why the generated code is right or wrong, how to push it to its limits, where it’ll break. ML system optimization (CUDA kernels, inference optimization, efficient training pipelines) is where your Zoho ML experience meets your new algorithmic depth. This is a technically rare combination.
Path 4: Research If you find you genuinely enjoy hard algorithmic problems for their own sake, research is on the table. Competitive programming at the Specialist/Expert level gives you the foundation to read algorithms papers and understand the contributions. This path takes years, not months, but M9 is a valid starting point.
The Closing Note¶
Here’s the honest version of why this was worth it.
You started because you felt outpaced by tools that generate code faster than you can reason about it. That’s a real problem, and it’s not going away. But the answer was never to out-generate the generators. The answer was to be the person who understands what the generated code is actually doing — the invariants it relies on, the edge cases it misses, the complexity tradeoff it makes without telling you.
That person doesn’t feel threatened by AI code generation. They use it as a draft and own the analysis. They’re the one in the room who can look at a “working” solution and say: “This is O(n²) disguised as O(n log n) — it’ll break at 10⁵ elements.” That’s not a marginal skill. That’s the skill.
Nine months is a genuine investment. 10-15 hours a week on top of a full-time job is not trivial. The fact that you planned it this systematically and saw it through to the end means something about how you work. That’s a character signal, not just a resume line.
The problems didn’t get easier. You got better at them. That’s the whole point.