Software Developer → ML / Applied AI Engineer

A detailed 41-week (~9½ month) roadmap built around Hands-On Machine Learning with Scikit-Learn and PyTorch, while keeping your current software development job. Buffer weeks, a light DSA track, and a system-design track are budgeted, not assumed away. The job search is not part of these 41 weeks — it is a separate, date-keyed block at the end of this document that starts when you set a search date. Calibrated for a developer with 0–2 years of experience and a diploma — three of the 41 weeks are extension weeks that disappear only if you prove you do not need them. Currently paused behind a fundamentals gate of up to eight weeks — start with the Gate section.

Overall strategy

Do not restart your career. Build on your software engineering experience and add ML, PyTorch, modern AI application development, and production ML skills.

Software Developer → AI-capable Software Engineer → ML / Applied AI Engineer
The middle rung is a destination, not a waypoint. If a later search does not convert into an ML role, you continue as a software engineer — a more employable one than you are today. Weeks 12, 13, 31 and 32 are plain software engineering, Projects #1 and #3 are backend services, and the whole portfolio is public evidence that you ship and deploy. You reach that rung around Week 26 regardless of who hires you.
Say this out loud once now, because it changes how the next nine months feel: there is no branch of this plan where the work is wasted. That removes the all-or-nothing pressure that ends most transitions around Month 4 — and it is a genuine property of an engineering roadmap, not a reassurance.
StageWeeksMain goal
GateBefore Week 0, up to 8 weeksBackend fundamentals — a 60-minute check opening week one, then at most 2 hrs/week on the highest-priority gap it finds; the roadmap is paused meanwhile
0Week 0Environment, compute and hosting plan, market scan, three learn-tests
1Weeks 1–4, 4bPython, data, SQL, statistics, math foundations — 4b is the extension week that turns the Week 0 learn-tests into passes
1.5Week 5Early win — ship a small AI demo, tag it v0
2Weeks 6–16 (+10b)Classical ML, Scikit-Learn, serving, Project #1 — 10b consolidates before serving
3Weeks 17–25 (+19b)PyTorch, deep learning, transformers, Project #2 — 19b consolidates before training deep networks
4Weeks 26–30LLMs + Applied AI — and Project #3's foundation, built as you learn
5Weeks 31–37Production ML/MLOps + hardening Project #3 into the flagship
DSAWeeks 1–37, every week1 hr/week of Python problems for fluency — the full NeetCode rebuild is deferred to the job-search block
DesignWeeks 6–33System design — one concept + one practice design per week, then Project #3 presented as a design answer
SearchDate-keyed, after the roadmapDSA rebuild, mocks, CV, applications — starts 12 weeks before a search date you set

10 hrs/weekKeep current jobBuild while learning3 serious projects3 buffer weeks + 3 extension weeks~410 hrs — ~345 learning + building, ~40 DSA, ~25 system design

Who this version is calibrated for. 0–2 years of professional experience in mobile and backend work, a computing-science diploma rather than a degree, rusty basics-only DSA, no system-design experience, and Python known mostly by analogy from Go, JS and C++. That changes two things and leaves everything else alone: the Week 0 skip-tests are now learn-tests with hours budgeted to reach them, and system design gets a real hour a week from Week 6. The projects, buffers, and evaluation discipline are unchanged — for a diploma-holder they matter more, not less, because the portfolio is what gets you past screens that would otherwise filter on the education line.
Why the job search is not in these 41 weeks. You are not searching yet, so the plan no longer budgets for it. That decision has one large consequence: the DSA rebuild is deferred with it. Coding-screen pattern recognition decays faster than anything else in this plan, so an 80-hour rebuild a year before any screen would mostly be paid for twice. Instead, DSA runs at one hour a week for Python fluency, and the full 2.5 hr/week rebuild lives in the job-search block, keyed to a date rather than to Week 26. The hours that frees go back into the topics this plan had trimmed to pay for it.
Edition confirmed — the PyTorch one. Stage 3 assumes an edition of Géron built on PyTorch rather than the more widely circulated Keras and TensorFlow one, and the copy sitting beside this plan is the PyTorch edition. Stage 3 works as written, and the chapter map is already filled in — see Materials.
How the 41 weeks are spent: 1 setup week, 25 weeks of instruction, 3 extension weeks (4b, 10b, 19b), 9 weeks of dedicated project building, and 3 buffer weeks. Week labels are kept from the 38-week version so every cross-reference in this document still holds; the extension weeks sit between labelled weeks, so "Week 26" is calendar week 29 and "Week 37" is calendar week 40. The weekly routine is the same for all 41 weeks — there is no reduced-hours phase, because there is no parallel job search.
The honest arithmetic. Ten hours a week is a hard limit, not a target: every week's allocation below sums to ten, and anything added to a week (a retake, a dataset choice, a deployment) replaces something inside those ten rather than sitting on top. The 38-week version ran at 9 hrs/week and assumed an experienced developer who would bank hours by skipping Weeks 1, 2, 12 and 31. For this profile those hours do not exist, and system design needs an hour that was never budgeted. That is paid by the Friday hour and by three extension weeks. Pass every Week 0 learn-test and it collapses back toward 38. Treat 41 as the target, not a promise — if a stage runs long, the duration moves, the content does not get compressed to fit.
Weeks 27–32 do double duty: they are instruction weeks, but every exercise is committed to the Project #3 repository rather than to scratch files. That is what lets the hardening weeks harden rather than build — see Stage 5.

Before the roadmap — a fundamentals gate

Duration: up to two four-week rounds at two hours a week; a 60-minute check opens week one

The roadmap is paused. Before any of it runs, check your backend fundamentals on an app you already have, and spend a small, fixed budget on the highest-priority gap the check finds.

Why this comes first: the roadmap serves an ML career transition. Its SQL week teaches analysis queries, not transactions, constraints or query diagnosis; its DSA hour is Python fluency for future screens; and its timeout, retry and monitoring material never asks you to diagnose an existing application on your own. Those are the fundamentals your day-to-day backend work runs on, and slowing the whole roadmap down would not add them.

Two hours a week is a temporary gate, not a new budget. Nothing from the roadmap runs meanwhile — if you have already started it, it pauses where it is, including the Tuesday DSA hour. Setup, the check, recovery work and practice all count toward the same 120 minutes a week — in week one, setup and the check take 70 of them.
The restart decision. The gate ends with a decision, not an automatic resume — straight after the check, at week four, or at week eight at the latest. Write down one learning outcome for the next four weeks, an actual weekly cap, and the date, four weeks after restarting, when you will check that outcome. If the cap is below ten hours, the 41-week schedule goes on the postponed list below, and the header and overview of this page get one line saying so.

Before you start — ten minutes

Choose the app. Get access to a test or local database — with realistic row counts if you can: seeded, or a restored copy if you are allowed to hold that data locally. Fix a weekly two-hour slot, and put the week-four checkpoint in your calendar.

The check — 60 minutes, on the chosen app

Documentation allowed; the first attempt without AI-written solutions. If the app is your employer's code, any later attempt with AI follows the data boundary in Stage 0.

AreaTimeTask
Database20 minPick one order-related query. Explain what each result row represents and whether a join could double-count totals. Read its execution plan. On small test data it still shows the joins, filters and actual row counts — which is where a duplicating join shows up — but the planner may choose differently at production size, so do not treat it as a prediction of production performance. Name one rule the database itself should enforce.
Data structures20 minPick the loop in the app that handles the most data — order items, events, messages. State its time and memory cost at today's size and at 10×. If it searches a list once per item, say what you would use instead. Then time it at today's size and at 10× in a small script, to check your estimate. Edge-case tests are round work, not check work.
Debugging20 minTrace one request that calls an external API. Find where the time goes and what a retry could accidentally repeat. Write down the first thing you would measure if it got slow.

Backups — evidence, not history: when was the last successful restore of this database, by anyone, and what was checked afterwards? If there is no restore evidence that matches the current setup and recovery is your responsibility, schedule a restore into a separate environment — never over the live database — in work hours if the system is your employer's, otherwise inside your weekly budget. This stays on your list even if the check lets you skip the gate: it is reliability work, not study.

Reading the results

If all three ran and none shows a gap, skip the gate and make the restart decision now.

Rules

Postponed during the gate: long DSA problem lists, cloud certifications and provider comparisons, new portfolio projects, and structured model-training study. Keep the AI work your job needs, and do not add a separate "keep up with AI" obligation.

First step: once the setup is done, pick one order-related query and check whether a join can inflate its totals.

Stage 0 — Set yourself up

Duration: Week 0

The goal is to make sure you can spend the next several months building without environment problems slowing you down — and to gather the two pieces of information you will need much later, while gathering them is still cheap.

This week is full: ten hours covers the market scan, the installs, the compute and hosting decisions, and the three learn-tests. If installs go badly, the scan and the learn-tests are the parts to protect. Everything else here can be finished in Week 1.

Scan your actual market first

Ninety minutes, before you install anything. Pull 20 real job postings from the market you can actually work in — your city, your country, or remote roles that hire from it — across the titles listed in the job-search block. For each, note the title, the modelling depth asked for, whether cloud, Kubernetes, or an orchestrator appears, whether they want RAG and evaluation or classical ML, and the education line — including whether it says "or equivalent experience." That last phrase is common, and counting how often it appears in your market tells you far more than any general claim about whether degrees matter.

You are not choosing your specialism today. The Applied AI and MLE tracks in this plan are nearly identical until Week 22, so committing now would mean deciding with the least information you will ever have. You are building the evidence for the decision in Week 16, once you have shipped Project #1 and know what you actually enjoy. Save the file; you will re-read it then.

What the scan buys you: if fifteen of the twenty postings demand Kubernetes and Terraform, you learn it in Week 0 rather than Week 26, and the platform question in the job-search block stops being hypothetical. If none of them do, you can stop carrying that worry for nine months. The scan will be stale by the time you search — it gets refreshed then — but it is what the Week 16 role choice is built on, so it is worth doing now.

Install and configure

CorePython 3, VS Code, Jupyter, Git, GitHub
DataNumPy, Pandas, Matplotlib, SQLite or Postgres
MLScikit-Learn, PyTorch
EngineeringDocker, virtual environments, dependency management

Learn-tests: take them now, expect to fail most of them

The previous version of this plan called these skip-tests and let an experienced developer bank the hours. You are not that developer yet, and the plan no longer assumes you are. Take all three tests in Week 0 anyway — in one sitting, no reference open — and record the result in a file. A fail is not a verdict; it is the schedule telling you which extension week you will use. The artifact for each test is unchanged; what changed is that hours are budgeted to reach it rather than assumed to be saved by it.

WeekThe artifact you must be able to produce, in one sittingIf you fail in Week 0
1 — PythonWrite a class with a context manager, a generator, and type hints, and explain a decorator you did not writeWeek 1 in full, plus 4 hours in Week 4b. Retake at the end of 4b.
2 — the SQL halfWrite a three-table join with a group-by and a window function from memory, with no reference openWeek 2 in full, plus 4 hours in Week 4b. Retake at the end of 4b.
12 — FastAPI + DockerProduce a containerized API with a request/response schema that a stranger can start with one docker run3 hours of Docker basics in Week 10b (image, container, volume, port, docker run a hello-world API you wrote), then Week 12 in full. Retake at the end of Week 12.

If you pass one, that is how an extension week disappears. Pass Python and SQL and Week 4b is skipped. Pass FastAPI + Docker and Week 10b shrinks to a Stage 2 catch-up you can drop if you are on schedule. There is no CI test: Week 31 teaches CI from scratch and nothing in the schedule depends on whether you already know it. Nothing gets banked to Week 22, 27 or Project #3 — the extension weeks are the honest replacement for a cushion.

Decide your compute and cost plan now

Week 21 fine-tunes a pretrained vision model, Week 15 puts Project #1 at a public URL, and Stage 4 calls paid LLM APIs. All three fail late and expensively if you have not decided where they run. Settle this in Week 0, not in Week 15 or 21.

GPU accessColab, Kaggle notebooks, or a rented cloud GPU. Confirm you can actually attach a GPU and train for 30 minutes without being disconnected.
LLM API budgetPick a monthly ceiling you are comfortable with and set a hard spend limit in the provider console. Most of this roadmap fits in a small budget if you cache and use small models for iteration.
Project #1 hostingPick the platform that will run the Project #1 container at a public URL, confirm its free or near-free tier still exists and fits a Scikit-Learn image, and set a monthly hosting budget with a hard cap or no payment method on file. Free container tiers keep shrinking; do not discover that in Week 15.
StorageWhere datasets and model checkpoints live. Do not commit them to Git.
SecretsAPI keys in environment variables or a .env file, never in code or notebooks. Add .env to .gitignore before your first commit, not after.
Set your data boundary now, in writing. From Week 5 onward you will be sending documents to third-party LLM APIs. Decide once, before you build anything: only public or personal non-sensitive documents. No employer code, no internal documents, no customer data, no anything covered by your employment agreement or an NDA. Your current job is the asset this whole roadmap is built on — do not put it at risk for a weekend demo. If you want to demo on realistic content, use open datasets, public documentation, or your own writing.

The book is already mapped

See Materials. The edition is confirmed, every week has its chapter, and every week the book does not cover has a named source. Spend twenty minutes reading that section, then move on. The point of naming a source for every orphaned week is timing, not diligence — discovering in Week 28 that you have no material is the same failure as discovering in Week 21 that you have no GPU. That work is done; what remains is to trust it and stop shopping.

Pre-write your cut-list

Three buffer weeks across 41 is roughly 7% slack — thin for nine months alongside a full-time job. The buffers will absorb a bad fortnight; they will not absorb a bad quarter. So decide now, while you are rested and nothing has gone wrong, what gets sacrificed when something does. The extension weeks (4b, 10b, 19b) are not buffers — they are instruction time you have already been told you need. Do not spend them on catch-up and then arrive at Week 16 with both gone.

The rule: if you reach a buffer week already behind, cut from this list rather than extend the schedule. Breadth goes before project quality — the earlier cuts sit in the weeks where a junior candidate is least likely to be interviewed on the detail. In order:

  1. Week 11 clustering — read for awareness, build nothing.
  2. Week 9 tree internals — Gini versus entropy is not worth a week of slippage; you will still train and tune trees.
  3. Week 10 beyond Random Forest and Gradient Boosting — AdaBoost, Extra Trees, stacking to awareness only.
  4. Week 3 confidence intervals and sampling theory — know the vocabulary, move on. Later than before, because a rusty statistics base costs you more in Stage 2 than it costs an experienced developer.
  5. Week 21 computer vision — only once you have committed to the text path for Project #2.
  6. System design drops to a fortnightly concept-only session — never to zero, and never in Weeks 28–33 where the Project #3 presentations live. Recovered as soon as you are back on schedule.
Never on this list, under any slippage: the three projects' mandatory deliverables — a working model, an honest evaluation, and a written account of what fails — and in particular Project #2's error analysis, which is the part that separates it from a tutorial; the Project #3 evaluation hours (the Week 27 question set, the Week 30 suite, the Week 35 fresh held-out measurement); the Week 5 spike and its frozen v0 tag; and anything else in Stages 4 or 5. Those weeks are the portfolio. If you are behind and everything above has been cut, the schedule extends — you do not quietly reclaim these. The one-hour DSA slot also stays: it is cheap, and a lapsed habit is harder to restart than to keep.

Suggested learning repository

ml-transition/
├── python/
├── numpy/
├── pandas/
├── sql/
├── math/
├── sklearn/
├── pytorch/
├── notebooks/
└── projects/
Ready to move on when: you can create a Python environment, install packages, run a notebook, initialize a Git repo, push to GitHub, run simple NumPy, Scikit-Learn, and PyTorch scripts, and you have trained something trivial on a GPU you can access on demand.
Four files exist: the market scan of 20 postings, the cut-list, the written data boundary, and the learn-test results. None takes long. All are worth more in Week 16 than they are today.

Materials and resources

This section is the finished version of the Week 0 mapping task. The edition is confirmed, the chapters are assigned, and every week the book does not cover has a named primary source.

The book — edition confirmed

The copy in this folder is the PyTorch edition: 19 chapters plus two appendices (Autodiff; Mixed Precision and Quantization). Chapter 10 is Building Neural Networks with PyTorch and Chapter 15 is Transformers for Natural Language Processing and Chatbots. Stage 3 therefore works exactly as written and you need no substitute PyTorch book — only the official tutorials as a reference.

Chapter map

WeekChapterNote
1–4—Not in the book. It assumes NumPy and Pandas already — see the next table.
61–2Landscape, then the end-to-end project
73Classification
84Training Models
95Decision Trees
106Ensemble Learning and Random Forests
117 + 8PCA from 7; K-Means only from 8. Skip DBSCAN, Gaussian mixtures, anomaly detection.
179Introduction to Artificial Neural Networks
18–1910Read in 18, build from it in 19
2011Training Deep Neural Networks
2112Deep Computer Vision with CNNs — trade away first if you chose Applied AI
2215Transformers. Skip 13–14 — RNN sequence models, already cut from the plan.

Chapters 16–19 (vision/multimodal transformers, speeding up transformers, autoencoders and diffusion, reinforcement learning) are the optional tail the plan already flags. Appendix A is worth thirty minutes in Week 18 if autograd does not click.

Weeks the book does not cover

One primary source each. All are first-party or long-stable, and none of them costs anything to read.

WeekTopicPrimary source
1, 4bPythondocs.python.org — the official Tutorial, chapters 3–9 only, then the Week 0 learn-test artifact rebuilt without notes
2NumPy, Pandas, SQLnumpy.org "absolute beginner's guide"; pandas.pydata.org "10 minutes to pandas"; sqlbolt.com for joins and aggregates, then the PostgreSQL tutorial on window functions and CTEs — SQLBolt does not teach either, and the Week 0 SQL learn-test asks for a window function
3Statistics and probabilitykhanacademy.org — the descriptive statistics, probability, random variables, and normal distribution units only; skip inference beyond confidence intervals
4Linear algebra, calculus3blue1brown.com — Essence of Linear Algebra and Essence of Calculus. Intuition, not proofs.
5, 26–28LLM APIs, embeddings, RAGYour chosen provider's documentation — the only source that stays current on models, pricing, and limits
12FastAPI + Dockerfastapi.tiangolo.com tutorial; docs.docker.com "get started"
13Experiment trackingmlflow.org quickstart
29Prompt injection, untrusted contentgenai.owasp.org — Top 10 for LLM Applications. This is the security half of the week.
29Tool callingProvider documentation
30EvaluationNo canonical text. Your own suite from Week 27 is the material.
31CI/CDdocs.github.com — GitHub Actions
32Monitoring and driftEvidently or equivalent — read the concept docs, not the API reference
6–33System designgithub.com/donnemartin/system-design-primer — the concept sections only, one per week; the practice designs are yours

Data structures and algorithms — fluency now, the rebuild later

NeetCode 150 (neetcode.io), solved on LeetCode, in Python. These are not alternatives — NeetCode is the curriculum, LeetCode is the platform. Python because it doubles as your ML language, and because as a Go/JS/C++ developer you need the reps in the language you will actually be screened in.

One hour per week, every week from Week 1 to Week 37 — the Tuesday slot. It never pauses inside the roadmap, including project and extension weeks — only the fundamentals gate, which sits outside the 41 weeks, stops it. The purpose during the roadmap is Python fluency: the idioms (dict/set/Counter, slicing, comprehensions, sorting with keys) that ML code leans on, kept warm by one new problem and one re-solve a week. It is not a screen-readiness track, and it is not pretending to be one.

The full rebuild — 2.5 hours a week, graphs and 1-D DP included, timed sets — is deferred to the job-search block, where it runs for the 12 weeks before a search date. The reason is decay: coding-screen pattern recognition is the fastest-decaying skill in this plan, so 80 hours of it a year before any screen would need to be re-done anyway. Doing the reps close to the date is the cheaper path.

What the fluency hour buys you, honestly: roughly one new problem and one re-solve a week, so about 35 problems logged by Week 37, in this order:

WeeksPatternsTarget
1–8 (incl. 4b)Arrays & hashing, two pointers~9 (Python idioms first: dict/set/Counter, slicing, sorting with keys)
9–16 (incl. 10b)Sliding window, stack~9
17–25 (incl. 19b)Binary search, linked lists~10
26–37Trees — traversal, BFS/DFS, BST properties~10

Heap, backtracking, graphs, and 1-D DP are not skipped — they are the rebuild block's material, where they get the 2.5 hours a week they need. Skip tries and 2-D DP unless your market scan says otherwise.

Timebox every problem to 25 minutes, then read the solution, understand it, and re-solve it from scratch a few days later. You are acquiring pattern recognition, not proving anything. Keep a log at dsa/solved.md in your learning repo — problem, date, solved-within-timebox yes/no, and the dates of each re-solve. It is the checkpoint artifact and the only honest measure of whether the track is working.

DSA: no AI during the attempt, ever. No hints, no "explain this problem to me", no generated or completed solutions while the timebox is running — and the same applies to every re-solve from memory. After the timebox you read the human-written NeetCode or LeetCode editorial. Only then is AI allowed, as a coach: critiquing your solution's edge cases, showing alternative approaches, and generating two or three new problems of the same pattern for extra reps. It still never writes or completes a solution for you, and it never enters mid-attempt. The entire value of the track is that your brain does the pattern-matching under pressure — an interviewer will not let you open a chat window, and every hint you take during an attempt is a rep you did not do. See the AI-usage section.

System design — a lightweight but real track

You have never designed a system, and "practise system design" was a one-line mention. From Week 6 to Week 33 it is the Wednesday hour, every week except project weeks (Week 33 keeps its session) and Week 22: one concept, then one small practice design done by you alone — 35 minutes on paper or a whiteboard, phone photo, requirements → estimates → API → data model → high-level components → one deep-dive → bottlenecks. Only then open an AI and paste the photo with this instruction: "You are the interviewer. Ask me the follow-up questions a senior engineer would ask about this design, one at a time. Do not propose a design. At the end, list what I missed." Note the questions you could not answer in system-design/wNN.md and commit it. If the model ever starts designing for you, the session is void — the skill being trained is defending your own diagram under pressure.

WeekConceptPractice design (you, alone, then attacked)
6How a design answer is structured; the seven steps aboveURL shortener, first attempt — no numbers, just the shape
7Back-of-envelope estimation: QPS, storage, bandwidthURL shortener again, with numbers this time
8Stateless services, load balancing, horizontal scalingPastebin
9SQL vs NoSQL, indexes, replication, read replicasDefend the storage choice for the shortener; change it and defend that
10Caching: cache-aside, TTL, eviction, invalidationRate limiter, single node — token bucket vs sliding window
10bConsolidationURL shortener again, cold — no AI until you have finished; then the full attack
11Sharding and partitioning, hot keysDistributed rate limiter — Redis, race conditions, what happens when Redis is down
12API design: idempotency, pagination, versioning, timeoutsYour own Project #1 endpoint as a design answer — you are building it this week
13Queues and async processing, at-least-once deliveryNotification system (email/push) with retries
16Consistency, availability, the read path vs the write pathChat system v1 — one-to-one messaging
17WebSockets vs long-polling vs SSE, presenceChat v2 — group chat, delivery and read status
18Fan-out on write vs fan-out on readNews feed v1
19Ranking as a service, feed caching, celebrity problemNews feed v2
19bConsolidationDistributed rate limiter again, cold
20Search: inverted index, tokenisation — the shape you will meet again in Week 27Autocomplete / typeahead
21Serving ML online: batch vs real-time inference, model versioning and rollout, feature consistencyAn online prediction service — your deployed Project #1, scaled to 1,000 QPS. Keep this session even if you skim the rest of Week 21.
22—No session. Week 22 is full; the hour goes to choosing the Project #2 dataset and metric.
25Object storage, CDN, large uploadsFile storage and sharing (Dropbox-lite) — the session Week 22 gave up
26Server-Sent Events, streaming responses, backpressureA streaming LLM endpoint — what the client sees when the model is slow, the provider times out, or the connection drops mid-answer
27How retrieval systems scale: vector indexes (flat vs HNSW), re-indexing, freshnessConcept only this week — you are building the real thing
28—Project #3 as a design answer, session 1 — the RAG pipeline you just assembled: ingestion, chunking, embedding, vector store, retrieval, reranking, LLM. Expect attacks on freshness, latency, cost per query, multi-tenancy, injection.
30—Project #3 as a design answer, session 2 — now with the evaluation suite and held-out numbers. Expect "how do you know it is good?" and "what breaks at 10× documents?"
33—Project #3 as a design answer, session 3, recorded — after hardening, with CI and monitoring. This recording goes into the Week 36–37 walkthrough package.
29, 31, 32One earlier concept, revisitedWhichever of the canonical designs you last did worst on
34–37—No sessions. The hour goes to the flagship.

The RAG pipeline is your best design material. Nobody else will have built, measured, and hardened the system they are describing; a URL shortener is table stakes, Project #3 is a differentiator. That is why three of the sessions are spent presenting it, and why the third one is recorded — it doubles as the architecture segment of your final walkthrough. The recorded cold walkthroughs of the canonical designs are interview rehearsal, and they now live in the job-search block. The concept track stays here because it is engineering knowledge, not rehearsal, and it does not decay the way problem reps do.

The Week 26 session uses developer.mozilla.org on Server-Sent Events as its source, because LLM token streaming is SSE and it is the one networking topic that is genuinely load-bearing here.

One source per topic. Collecting is not studying. Every row above is a single primary source, chosen so you never have to decide what to open. The failure mode of this section is turning it into a reading list of forty links you feel behind on — which is how a gap you could close in an hour becomes a gap you carry for nine months. If a source is not on this table, you do not owe it anything.
What this roadmap actually costs. Nothing in the tables above. NeetCode's list and video solutions are free, and LeetCode's free tier covers essentially all of the 150 — their paid tiers add company-tagged questions and courses you do not need. The only real spend is the one Week 0 already budgets: LLM API usage from Week 5 onward, controlled by the hard cap you set in the provider console and by the per-run eval cost you work out in Week 26; and optionally GPU time in Week 21, though Colab and Kaggle free tiers are enough to fine-tune a small vision model. The book is the expense you have already covered.
Links point at landing pages, not deep paths, on purpose. Documentation sites reorganise; the domains do not. If a link 404s, search within the site rather than hunting for the old path — and if a resource above has gone stale by the time you reach that week, replace it with the current first-party equivalent rather than hunting for a tutorial.

Stage 1 — Foundations

Duration: Weeks 1–4, plus extension Week 4b

Do not spend months preparing before touching ML. Four focused weeks and one consolidation week are enough to start. The DSA fluency hour begins this week too — see the routine; the Tuesday slot is already spoken for.

Week 1 — Python for data work

Learn — not review — lists, dicts, sets, tuples, comprehensions, functions, lambdas, classes, exceptions, context managers, iterators, generators, decorators, modules, packages, and type hints. Your Go, JS and C++ give you the concepts; the week is about the Python spelling of them, and about the idioms (comprehensions, unpacking, enumerate/zip, slicing) that ML code and NeetCode solutions both lean on. This is a learn-test week: the artifact is the Week 0 Python test, rebuilt at the end of the week without notes.

Your target is not clever Python. Your target is being able to read ML code without the language itself slowing you down.

Week 2 — NumPy + Pandas + SQL

NumPyarrays, shape, dtype, indexing, slicing, masks, reshape, broadcasting, axis, mean/sum/std, matrix multiplication
PandasDataFrame, Series, read_csv, info, describe, loc, iloc, groupby, merge, missing values, sorting
SQLjoins, group by, window functions, CTEs, subqueries — interviewed directly for MLE and ML Platform roles, and how you will actually get most real training data

Practice on a CSV dataset. Explore missing values, distributions, correlations, outliers, and target balance before training any model. Then load the same dataset into a database and reproduce three of those analyses in SQL.

Week 3 — Statistics

Learn mean, median, variance, standard deviation, percentiles, correlation, probability, conditional probability, independence, random variables, normal distributions, expected value, sampling, population vs sample, bias, variance, confidence intervals, and noise.

Week 4 — Linear algebra + calculus

Focus on scalar, vector, matrix, tensor, vector addition, dot product, matrix multiplication, transpose, dimensions, functions, slope, derivative, partial derivative, gradient, and chain-rule intuition.

prediction
   ↓
calculate loss
   ↓
calculate gradient
   ↓
adjust parameters
   ↓
repeat

Stage 1 mini-project

load data
↓
clean data
↓
basic statistics
↓
plots
↓
written conclusions
Week 4b — Extension: turn the learn-tests into passes. Nine hours, plus the DSA hour. Split them across the tests you actually failed: if both, four on Python (retake the Week 0 test cold; if it still fails, spend the weekend on it), four on SQL (window functions and CTEs until the three-table query comes out without a reference), and one on whichever of Weeks 3–4 did not land — for most people with a diploma-level maths base that is the chain-rule intuition, and Week 8 and Week 17 both stand on it. If only one test failed, it gets the whole week. Finish and push the mini-project here if it is not already public. Skip this week only if you passed both the Python and SQL learn-tests in Week 0.
Ready to move on when: you can explain X.shape, matrix multiplication at a high level, mean vs variance, correlation, derivatives, gradients, train/test data, what a DataFrame is, and you can write a multi-table SQL query with a group-by from memory — and both the Python and SQL learn-test artifacts exist, produced without notes.
External proof: the mini-project is pushed to a public GitHub repo with a README a stranger could follow, and dsa/solved.md shows at least 5 problems logged.

Stage 1.5 — Early win: ship a small AI demo

Duration: Week 5

This week is out of sequence on purpose, and it is the most important structural change in the plan.

Your leverage as a working software engineer is application engineering, not model research. That skill needs no ML theory at all — you can call an LLM API and wire up retrieval with the Python you already have. Building it now, before you have "earned" it, gives you three things you would otherwise not have until Month 8:

Scope it aggressively

Nine hours — the whole week, not one weekend. Your routine gives you five hours across Saturday and Sunday; the other four come from the weekday slots, spent reading provider documentation so the weekend is pure building. Load a folder of documents, chunk them naively, embed them, store them in the simplest vector store you can find, and answer questions over them from a command line. No auth, no database, no UI, no tests, no Docker.

Before you pick the documents: every chunk you embed is sent to a third-party API. Use public documentation, an open dataset, or your own personal writing. Not your employer's code, internal docs, or anything under an NDA — see the data boundary you set in Week 0. Keep your API key in an environment variable and confirm git status is clean of it before the first push.
your documents
   ↓
naive chunking
   ↓
embeddings
   ↓
simple vector store
   ↓
question → retrieve → LLM → answer

It will be mediocre. That is the point — Weeks 27 and 30 exist to teach you exactly why, and in Week 27 you will fork this repository into Project #3 and rebuild it properly.

Ready to move on when: the demo runs end to end and is pushed to GitHub with a README and an honest "known limitations" section listing everything you already know is wrong with it.
Then tag it v0 and stop touching it. This repository is now a permanent exhibit, not a working branch — every improvement from here happens in the Project #3 fork. Shown side by side in Week 37, the naive first attempt and the measured rebuild tell a story about your growth that neither tells alone. You cannot show that contrast if you have quietly overwritten the first half of it.

Stage 2 — Classical Machine Learning

Duration: Weeks 6–16

This is the core Scikit-Learn stage and the first major section of Géron’s book.

Week 6 — ML landscape + end-to-end workflow

Study supervised vs unsupervised learning, batch vs online learning, overfitting, underfitting, generalization, hyperparameters, validation, and test sets.

Problem
 ↓
Data
 ↓
Quick structural look — shape, dtypes, target balance
 ↓
Choose split strategy → reserve the test set
 ↓
Detailed EDA — training data only
 ↓
Preprocessing
 ↓
Baseline
 ↓
Train models
 ↓
Cross-validation
 ↓
Tune
 ↓
Evaluate on the test set — once
 ↓
Deploy
 ↓
Monitor
The split comes before the exploring. Detailed EDA changes your feature and modelling decisions, so exploring the full dataset first leaks the test set into your choices — Géron calls this data snooping bias and reserves the test set before looking closely, for exactly this reason. A quick structural glance is fine; correlations, distributions, and outlier hunting happen on training data only.
Choose the split strategy from the dataset's structure, not from the problem's name. Look at what the rows actually are before deciding.
Time-based when the rows carry timestamps and the prediction is about the future — a transaction log, monthly demand. Train on earlier periods, test on later ones, or you are predicting the past.
Group-based when several rows share an entity — multiple rows per customer, patient, or device. Keep every row of a group on one side, or the model recognises the entity instead of learning the pattern.
Stratified random when the dataset is a single snapshot with one row per entity and no time axis — which is what many public churn datasets are. Stratify on the target so the class balance survives the split.
A churn dataset can need any of the three, depending on how it was collected. Write down which one you used and why; it is the first question a reviewer asks.

Week 7 — Classification

Learn binary and multiclass classification, confusion matrices, accuracy, precision, recall, F1, ROC, AUC, PR-AUC, calibration, and decision thresholds.

Change the decision threshold on a small classifier and observe what happens to precision, recall, and F1.

ROC-AUC will not tell you what you need on Project #1. Churn, fraud, and loan default are all imbalanced. Imbalance does not inflate ROC-AUC — it is the probability a random positive ranks above a random negative, a random ranker scores 0.5 at any class ratio, and a model's AUC is the same whether positives are 50% or 1% of the data. What changes is what a given AUC means: when positives are rare, a tiny false-positive rate is still a large number of false positives, so a 0.9 AUC can sit alongside terrible precision. Report PR-AUC alongside it — precision-recall curves are built from precision, which is the number that collapses when positives are rare, and ROC-AUC does not look at it.
Then check calibration. If you tell a business that a customer has a 30% chance of churning, that number has to mean 30%, and a plot of predicted probability against observed frequency is how you find out it does not. Both are cheap, both come up in interviews, and both separate someone who has deployed a classifier from someone who has only trained one.

Week 8 — How models learn

Study linear regression, gradient descent, SGD, polynomial regression, regularization, Ridge, Lasso, Logistic Regression, and learning curves.

Implement a tiny linear regression model once without Scikit-Learn to understand prediction, loss, and optimization. This is the week that pays for the Week 4b chain-rule hours. Then fit a polynomial model to the same data and plot its learning curves against the linear one — that pair of plots is the clearest picture of over- and underfitting you will see all year.

Week 9 — Decision Trees

Study splits, Gini impurity, entropy, depth, overfitting, and regularization. Train trees with different maximum depths and visualize the behavior.

Week 10 — Ensembles

Learn bagging, Random Forests, Gradient Boosting, Histogram Gradient Boosting, and feature importance. Run Extra Trees, AdaBoost, and a simple stacking ensemble once each on the same data so you have seen them behave — they are the first thing on the cut-list after clustering if you slip.

Compare Logistic Regression, Decision Tree, Random Forest, and Gradient Boosting on the same problem. Extra comparisons beyond those four are stretch work, here and in Project #1.

Week 10b — Extension: Stage 2 consolidation and the Docker on-ramp. Eight hours, plus the DSA hour and the design hour. Three go to Docker basics if you failed the Week 12 learn-test in Week 0 — image vs container, ports, volumes, a Dockerfile for a hello-world FastAPI app, docker run it — so that Week 12 teaches serving rather than Docker vocabulary. The rest finishes any chapter exercises from Weeks 6–10 still outstanding, and re-does the Week 7 threshold and calibration exercise, which is the one interviewers actually ask about. System design: the Week 10b consolidation session. Skip this week only if you passed the FastAPI + Docker learn-test and every Stage 2 exercise so far is committed.

Week 11 — Dimensionality reduction + clustering

Learn PCA, the curse of dimensionality, and K-Means. These two carry almost all of the interview and practical weight in this area. Clustering is one small exercise — cluster something, look at the clusters, write three sentences about whether they mean anything — not a week of it.

Deliberately trimmed: DBSCAN, Gaussian mixtures, and anomaly detection are cut from the schedule. Six topics do not fit in one week, and these three are rarely load-bearing for the roles you are targeting. Read the chapter sections for awareness; do not build with them. Come back if a specific job description asks for them.

Week 12 — Serving: FastAPI + Docker

Moved forward from Stage 5, because Project #1 requires it. Wrap a trained Scikit-Learn model in a FastAPI endpoint with a request/response schema, containerize it, and run the container locally. Keep it minimal — no auth, no database. This is a learn-test week: retake the Week 0 FastAPI + Docker test at the end of it. The Wednesday design session presents this same endpoint as a design answer — you will be asked about it in exactly that form.

Week 13 — Experiment tracking

Track model versions, dataset versions, hyperparameters, metrics, artifacts, and code versions. Use a tool such as MLflow or an equivalent. You want this habit in place before Project #1, not after, so the project produces a real experiment log instead of a folder of forgotten notebook runs. Local SQLite as the tracking backend and local files for artifacts — MLflow's model registry needs a database-backed store, and a file-only setup does not support it — then register one model version and load it back by name. No remote service. The habit is the point; the infrastructure is not.

Weeks 14–15 — Project #1

Choose a structured-data problem such as customer churn, loan default, employee attrition, fraud detection, house prices, insurance claims, or customer conversion.

Settle four things in Week 13, not Week 14. Eighteen hours is enough to build this project and nowhere near enough to also choose it. Before the project weeks open, fix the dataset (downloaded, licence checked, provenance noted); the split strategy (time-based, group-based, or stratified random, chosen from the dataset's structure per Week 6); the target metric and the reason for it (PR-AUC for the imbalanced classifiers above, MAE or RMSE if you went with a regression problem like house prices); and a baseline number from something trivial such as a majority-class or mean predictor. If your real model cannot beat that baseline, you have learned something genuinely useful and it cost you an hour.

Mandatory, in this order: data loaded and split, baseline recorded, one trained model compared against it with the result explained either way, honest evaluation on the held-out set exactly once, the FastAPI endpoint from Week 12, a Dockerfile, a README. Stretch, and only once all of that runs: comparison across four algorithms, hyperparameter tuning, feature-importance analysis, calibration plots. A finished small project beats an unfinished thorough one, and the Week 16 buffer is not a licence to start stretch goals in Week 15.

project/
├── data/
├── notebooks/
│   └── exploration.ipynb
├── src/
│   ├── preprocessing.py
│   ├── train.py
│   ├── evaluate.py
│   └── predict.py
├── tests/
├── models/
├── api/
│   └── main.py
├── Dockerfile
├── requirements.txt
└── README.md

Your README should explain the problem, dataset, metric choice, experiments, final result, failure modes, and how to run/deploy the project.

Reproducibility is part of the deliverable — for all three projects. One command that runs the whole thing, pinned dependency versions, fixed random seeds wherever results depend on them, a note on where the data came from and what licence it carries, and an explicit limitations section. This is the difference between a repository someone can evaluate and one they close after two minutes. It is also the habit that makes Week 31's CI possible at all.
Deploy this one for real. Push the container to the platform you chose in Week 0 and keep the URL live. Project #1 is the right project to expose publicly: it has no paid LLM call per request, which is the cost that makes Project #3 unsafe to open. Hosting charges remain subject to the platform's limits — free tiers have usage caps, sleep-on-idle, suspension rules, and on some platforms bandwidth overage that bills once a payment method is on file. Before deploying, re-read the limits of the platform you chose in Week 0, confirm the hosting budget you set there still holds, and note both in the README. Budget two hours in Week 15 or the Week 16 buffer — they come out of the project's nine, not on top of them.
A link a reviewer can open outweighs any amount of "and it's containerized" on a CV — and it turns Docker from something you have read about into something you have operated.
Week 16 — Buffer. If Stage 2 ran on schedule, use it to polish Project #1, get it deployed, and write a short post about what you learned. If it slipped — and something usually does — this is where you catch up, cutting from your Week 0 list rather than borrowing hours from Stage 3. Do not delete this week to "save time"; a plan with no slack is a plan that breaks on first contact with a busy work sprint. The DSA hour and the Wednesday design hour (chat system v1) run as normal — they are never what a buffer week absorbs.
Also in Week 16 — choose your primary target role. Re-read the 20 postings you scanned in Week 0, now that you have actually built and shipped a model. Pick one primary role and one fallback, and commit to a path:
Applied AI — take the text path for Project #2, treat Week 21's computer vision as optional from here on, and spend the recovered hours on evaluation, retrieval quality, and deployment in Stages 4 and 5.
MLE — keep the full modelling breadth and Week 21, and use the platform decision in the job-search block to add data pipelines and cloud.
Pick one. The schedule is already full, and hedging across both is how people arrive at Week 37 holding two half-portfolios. Week 16 is also the honest moment for this: Weeks 1–22 are nearly identical either way, so nothing you have done is wasted whichever you choose — and you now know something Week 0 could not tell you, which is whether you actually enjoy this.
Ready to move on when: you can explain overfitting, validation data, data leakage, precision vs recall, ROC-AUC vs PR-AUC on imbalanced data, trees vs forests, cross-validation, feature scaling, and preprocessing pipelines.
External proof: Project #1 is public, its API runs from a single docker run, it is deployed at a URL that currently responds, and one other engineer has read the README and told you what was unclear.

Stage 3 — Deep Learning + PyTorch

Duration: Weeks 17–25, plus extension Week 19b

Week 17 — Neural network fundamentals

Learn neurons, layers, inputs, weights, biases, activation functions, forward pass, loss, backpropagation, epochs, batch size, and learning rate.

Week 18 — PyTorch fundamentals

Learn tensors, nn.Module, autograd, Dataset/DataLoader, model saving/loading, and basic optimization.

for X, y in loader:
    optimizer.zero_grad()
    prediction = model(X)
    loss = criterion(prediction, y)
    loss.backward()
    optimizer.step()

Week 19 — Build small neural networks yourself

Implement a regression neural network, a binary classifier, and a multiclass classifier. Track training loss, validation loss, and useful metrics.

Week 19b — Extension: Stage 3 consolidation. Eight hours, plus the DSA hour and the design hour. Weeks 17–19 are the steepest new material in the plan for someone whose calculus is intuition-level and who has never met autograd. Use this week to make the three Week 19 networks actually train, to derive backpropagation for a two-layer network on paper once (Appendix A of the book if it still does not click), and to read Week 20's chapter ahead of time so Week 20 is building rather than reading. System design: the Week 19b consolidation session. Skip this week only if all three Week 19 networks train, you can write the training loop from memory, and you can explain what loss.backward() does to a colleague.

Week 20 — Training deep networks

Study vanishing gradients, initialization, ReLU, normalization, gradient clipping, Adam/AdamW, learning-rate scheduling, dropout, weight decay, and transfer learning. Learn two learning-rate schedules properly (OneCycle and cosine) and compare them on one of your Week 19 networks; then do one small transfer-learning exercise — freeze a pretrained backbone, train a new head — so that Week 21 or Week 23 is the second time you have done it, not the first.

Week 21 — Computer vision

Learn CNNs, convolution, kernels/filters, pooling, feature maps, ResNet, and transfer learning. Fine-tune a pretrained vision model on a small dataset — this is the week your Week 0 GPU decision pays off.

If you chose Applied AI in Week 16, this week is optional. Skim it for vocabulary, take the text path in Weeks 23–24 where you will fine-tune a transformer instead, and move the recovered hours to Week 22 or Week 27. Keep the Wednesday design session either way — an online prediction service is your material regardless of path. If you chose MLE, keep the week in full.

Week 22 — Attention + Transformers

Go deep on (about 6 hours): tokenization, embeddings, attention, and Transformer architecture. Attention is the one idea in this week that interviewers actually probe, and it is the foundation of everything in Stage 4.

Working familiarity only (about 2 hours): load and run a pretrained model through Hugging Face, and know the BERT vs GPT-style distinction. In-context learning and instruction tuning are read, not practised — you will live them from Week 26 onward. You will use all of these constantly in Stage 4 without needing to have trained one.

The remaining hour is the Wednesday slot, given up by the design track this week: choose the Project #2 dataset and target metric, check the licence, and write the baseline down. That is nine hours plus the DSA hour — the week is exactly full. If something has to give, it is the two familiarity hours, not the attention hours.

Fine-tuning moved, not cut. If you take the text path for Project #2, the fine-tune happens there in Weeks 23–24, where there are hours for it. If you take the image path, Week 21 already gave you transfer learning on a real model and the concept transfers. Either way you fine-tune something; it just does not get crammed into this week.
Deliberately trimmed: the original plan spread NLP basics and transformers across two weeks and included RNNs and LSTMs. Recurrent sequence models are no longer on the interview path for the roles you are targeting, and cutting them frees the time that Project #2 was missing. Understand attention deeply; know that RNNs existed.

Weeks 23–24 — Project #2

Two weeks, not one — and never collapsed to one. Build either an image classifier or text classifier with PyTorch. Include a Dataset/DataLoader, training loop, evaluation, experiment tracking, inference API, and an error-analysis section.

The dataset and target metric were chosen in Week 22. Separate mandatory from stretch: a working training loop, honest evaluation, and the error analysis are mandatory; architecture comparisons and hyperparameter sweeps are not. The same reproducibility rules apply — one command, pinned versions, fixed seeds, data provenance, stated limitations.

If you choose the text path, fine-tune a small pretrained transformer rather than training from scratch — this is the fine-tuning exercise deferred from Week 22, and it belongs here where the hours exist.

The error analysis is the part that distinguishes you from a tutorial follower. Look at the examples your model gets wrong, categorize the failures, and write down what you would do next. It is the deliverable that survives every cut.

Week 25 — Buffer. Catch-up, or use it to finish the error analysis properly. Nothing else is scheduled here except the DSA hour and the Wednesday design session (Dropbox-lite, the one Week 22 gave up). If Stage 3 ran on schedule, read Week 26's provider documentation ahead so the LLM-API week starts with building.
Optional for now: later chapters on multimodal models, speed optimizations, GANs/diffusion, and reinforcement learning can be skimmed or postponed until they match your target role.

Stage 4 — Applied AI / LLM Engineering

Duration: Weeks 26–30

You built a naive version of this in Week 5. Now you learn why it was mediocre. The routine does not change here — the same ten hours, the same slots.

Everything you write in Weeks 27–30 goes into the Project #3 repository. Not scratch files, not notebooks you abandon on Sunday night. Fork the tagged v0 demo in Week 27 and treat these four weeks as the flagship's foundation: Week 27 becomes its ingestion and retrieval layer, Week 28 its RAG pipeline, Week 29 its one tool, Week 30 its evaluation suite.
This is what makes the Stage 5 arithmetic work. Weeks 33–36 give you about 35 hours — enough to harden a system that already exists and has been measured for six weeks, not enough to build a production RAG system from scratch. Build it twice and you will finish neither.

Week 26 — LLM APIs

Learn system/user messages, context windows, tokens, temperature, structured outputs, streaming, rate limits, retries, timeouts, caching, and cost modelling. The Wednesday design session is Server-Sent Events and a streaming endpoint — LLM token streaming is SSE, and it is the one networking topic that is load-bearing here.

Caching earns a mention of its own because it decides whether the evaluation suite you are about to build is something you can afford to run on every commit or something you run twice and quietly abandon. Work out the per-run cost of that suite now, and know which lever brings it down — prompt caching, response caching, or a smaller model for iteration.

Week 27 — Embeddings + vector search

Learn embeddings, vector similarity, cosine similarity, semantic search, chunking strategies, vector storage, and reranking.

Reranking is the cheapest large win available in retrieval, so it belongs here rather than nowhere: retrieve generously with vector search, then reorder the candidates with a stronger cross-encoder or model-based scorer before anything reaches the LLM. Measure the difference — it doubles as the clearest proof that your evaluation set actually works. If reranking does not beat the baseline on your documents, that is the result you report; a measured "no improvement" is worth more than an assumed one.

Project #3 starts this week. Fork your tagged v0 demo into a new repository and leave v0 untouched. Everything below lands in the fork.

Build your question set before you change any retrieval code. Hand-write about 100 questions against your documents. For each, record the expected answer, the supporting passage — quoted text plus page or section, never a chunk ID, because Week 27 changes the chunking and chunk IDs will not survive it — and whether the system should abstain. Include ten to fifteen abstain cases: questions the documents do not answer, where the right output is "not in these documents". Then split them, and commit the split:
Development set (~60 questions) — what you iterate against all through Weeks 27–29. Run it constantly. Tune chunking, embeddings, and reranking against it freely.
Held-out set (~40 questions) — commit it, then do not look at it, do not run against it, and do not tune anything on it until Week 30.
For retrieval, count Recall@k (how often the correct passage lands in the top k) and MRR (how high it ranks) — over the answerable questions only. Abstain cases have no gold passage, so they cannot be scored for retrieval; they are scored under abstention in Week 30 and must be excluded here or they silently drag both numbers down. Record both on the development set before changing anything. That pair is your baseline, and every decision from here is measured rather than guessed.
This is the Week 6 discipline again, and it is easy to lose here. A single frozen question set has a quiet problem: once you have optimized chunking, embeddings, and reranking against it for four weeks, it is no longer an evaluation set — it is a development set, and the number it reports at the end is a training score, not a generalization score. That is exactly the data-snooping bias Géron warns about, arriving through a different door.
The size is not arbitrary either. A 20-question held-out set moves in 5-point jumps; 40 questions give finer score increments and more evidence, though finer increments alone do not make a difference significant. Writing a hundred questions is two dull afternoons. Even so, treat the result as a small portfolio evaluation — report the counts and the limitations alongside the number, not as proof of broad reliability.

Week 28 — RAG

Assemble the full pipeline in the Project #3 repository, running the development set as you go. Answer quality now rests on retrieval quality, and you already have numbers for the second.

Then present it. This week's system-design session is Project #3 as a design answer, session 1 — draw the pipeline you just built, alone, then let the AI interviewer attack it (freshness, latency, cost per query, what happens at ten times the documents, what happens when a chunk contains instructions). Write down the questions you could not answer; several of them are Week 29 and Week 30's to-do list.

Documents
   ↓
Parser
   ↓
Chunks
   ↓
Embeddings
   ↓
Vector DB

User question
   ↓
Embed question
   ↓
Retrieve chunks
   ↓
LLM
   ↓
Answer + sources

Week 29 — Tool calling, and the failure modes that matter

Learn tool/function calling, workflow state, retries, tool failures, timeouts, structured-output failures, and human approval boundaries.

Weight this week toward security and failure handling rather than agent frameworks. Spend roughly half of it on prompt injection, untrusted retrieved content, and data leakage. That is not a detour: your system reads documents and hands them to a model that can call tools, so a hostile instruction hidden in a retrieved chunk is precisely the shape of the threat. "What happens if one of your documents tells the assistant to ignore its instructions?" is a question an interviewer can ask about the system you actually built. Generic multi-agent orchestration is not.

Build exactly one tool, and build it here. Project #3 claims tool calling in your portfolio, so the project has to contain one — one is enough, and one is all the hours allow.
Use filtered retrieval: the model calls it with an explicit source or date filter when a question is scoped ("what did the 2024 handbook say about X?"). It is genuinely useful, it needs no write access, and it fails in ways you can test — bad filter values, empty result sets, filters that silently match nothing and quietly return a confident answer from the wrong document.
Write those failure tests now, while the material is fresh. If you later want an approval boundary to talk about, add a second tool that writes something — but not at the cost of the evaluation work.

Week 30 — Evaluation

Expand the Week 27 development set into a real evaluation suite: cover the failure cases you have hit since, and add cases that exercise both the tool and the injection attempts from Week 29. Track Recall@k and MRR for retrieval, citation correctness (do the cited passages actually support the answer?), faithfulness and hallucination rate, abstention (does it say "not in these documents" when it should, and only then?), task success, tool success, latency, and cost per query.

Grade answers against a written rubric, committed next to the questions: what counts as correct, partially correct, and wrong for each, so that a model-graded score means the same thing next month. Run the grader at temperature zero and pin the model version; then run the whole suite three times on the same commit and record the spread. Three runs give you the observed run-to-run variation — an initial estimate, not a floor. An improvement smaller than that spread is not yet demonstrated, and it is the number that decides how loose Week 31's CI threshold has to start.

Make it runnable as a single command that prints a table of scores. That command is what turns Project #3 from a demo into something you can defend — and it is what Week 31's CI will run.

System-design session 2 on Project #3 happens this week, after the held-out run: the same presentation as Week 28, but now every claim has a number behind it. "How do you know it is good?" is the question most people cannot answer about their own project. You can.

Now open the held-out set — once. With the suite built and your development numbers as good as you can get them, run the 40 questions you have not touched since Week 27. The gap between the two scores is the interesting result, and it is yours to report honestly: a large gap means you tuned to the development set, which is worth knowing and worth saying out loud.
The held-out number is the one you quote. Keep tuning against it and it stops being held out — so the Week 35 measurement uses fresh questions rather than these.
Version everything a score depends on. Prompts, model names and versions, chunking parameters, retrieval settings, and the evaluation results themselves, committed together. Six weeks from now a number will move and you will need to know what changed. "Which prompt produced that result?" is the same question as "which code produced that model?" — the one you already answered with experiment tracking in Week 13.
Ready to move on when: you have run v0 and the current system against the same held-out set, can report the comparison with numbers, and can explain the result — including which specific changes moved which metric, and any that did not. The rebuild will almost certainly score higher; the exit criterion is the measured, explained comparison, not the direction.
External proof: the Project #3 repository already contains ingestion, retrieval with reranking, a RAG pipeline, one tool with failure tests, and an evaluation suite that runs from a single command. Stage 5 hardens this. It does not build it.

Stage 5 — Production ML + flagship project

Duration: Weeks 31–37

Production skills come before the hardening weeks, so Project #3 can actually apply them instead of promising them. The system itself already exists — you have been building it since Week 27.

Week 31 — CI/CD + ML testing

Test data schemas, preprocessing, model loading, prediction shapes, feature ranges, API behavior, and evaluation regressions. Add CI to GitHub, and retrofit it onto Projects #1 and #2 while the material is fresh.

For Project #3, CI runs your Week 30 evaluation suite and fails the build when a metric regresses past a threshold you set. That one check is the most persuasive thing in the repository: it says you treat retrieval quality as something that can break, rather than something you measured once and hoped about.

Split the suite by cost and determinism. Retrieval metrics — Recall@k and MRR on the development set — can be free and deterministic, and the per-push check has to be built so that they are: corpus and question embeddings computed once, versioned, and cached in the repository or an artifact store; the reranker either local or its scores cached the same way; chunking and retrieval settings pinned in a config file that the check reads; and no external API call anywhere on the per-push path. If any of those is missing, a push re-embeds sixty questions through a paid endpoint, or a hosted reranker returns slightly different scores, and the check is neither free nor stable. Run it on every push with a tight threshold.
The LLM-judged metrics — faithfulness, citation correctness, abstention, task success — cost money per run and vary between runs: run them nightly or on tag, at temperature zero with the grader model pinned, and set the starting threshold from the run-to-run variation you measured in Week 30, then tighten it as more runs accumulate.
Both schedules run the development and regression cases only. The held-out sets are never wired into CI — a held-out set that runs on every push stops being held out within a week. A CI that flakes gets ignored within a fortnight, and an eval that costs a dollar a push gets switched off. The split is also the better answer to "you run LLM evals on every commit? What does that cost?"

Week 32 — Monitoring + drift

Learn service health, latency, error rates, data drift, prediction drift, model degradation, LLM evaluation regressions, and cost monitoring. Produce one drift report with Evidently or equivalent against Project #1's data. If the dataset has a time axis, its earlier and later periods are the reference and current windows. If it is a snapshot with no time axis — which Week 6 allows — build a clearly labelled synthetic shift: copy the test set, move one or two feature distributions in a way you write down, and run the report on that copy against the original. Label it synthetic everywhere it appears; the exercise is reading a drift report, not claiming to have seen drift; wire health, latency, and cost-per-query metrics into Project #3; and add an alert that fires when the nightly evaluation run drops below the Week 31 threshold. Do not survey the tooling landscape beyond that.

Key question: “My model worked well six months ago. How do I know it still works well today?”

Weeks 33–36 — Project #3, hardening the flagship

Four weeks at the full rate — about 35 hours: eight in Week 33, where Wednesday is the recorded design session, and nine in each of Weeks 34–36. The DSA hour continues throughout.

Thirty-five hours does not build a production RAG system. It comfortably hardens one that has existed since Week 27, has been measured since Week 27, and already carries an evaluation suite, one tool, and CI. That is the entire reason Stage 4 committed its work to this repository — do not restart here. Your target:

Documents
   ↓
Parsing / chunking
   ↓
Embeddings
   ↓
Vector database
   ↓
Retrieval + reranking  ←── measured against your eval set
   ↓
LLM  ⇄  filtered-retrieval tool
   ↓
API (answer + sources)
   ↓
Logging + eval suite in CI
WeekFocus
33Harden ingestion — real parsing, awkward and malformed documents, re-index, confirm the development-set metrics still hold. Wednesday: Project #3 design session 3, recorded — it becomes the architecture segment of the Week 36–37 walkthrough
34FastAPI endpoint, answer generation with sources, error handling, the Week 29 tool wired in with its failure paths, and response caching — measured as a before/after on cost per query and latency, because caching is the one cut item people do ask about. Two rules: the cache key includes everything an answer depends on (question, retrieval settings, prompt version, model version, corpus version), so a change to any of them invalidates it rather than serving a stale answer; and every evaluation run — nightly, Week 35's clean measurement, the noise-floor runs — bypasses the response cache, or it measures the cache instead of the system
35Full test suite, both halves of the evaluation running in CI on their own schedules, and a fresh set of about 40 held-out questions for one clean final measurement
36Docker, private deployment, logging and the Week 32 monitoring hooks, README and a written walkthrough

Ship at the end of each week. A working narrow system in Week 33 that grows is far better than an ambitious system still broken in Week 36.

Cut from the scope, on purpose: authentication, a web UI, and a separate application database. They are the first things people build and the last things a reviewer asks about. Nobody will question you on a login form. They will absolutely question you on how you measured retrieval quality and what you did when it was bad — so the hours go there. The extra hours this version has go to evaluation and caching, not to a login form.
Deliberately kept in: the single tool from Week 29. Your portfolio claims tool calling, and a claim with no code behind it is worse than no claim at all. One tool, with failure tests — not an agent framework.
Add the rest later if the project has momentum, or when a specific job description makes one of them relevant. An honest README listing them as known gaps reads better than a half-finished auth system.
Deploy this one privately. Unlike Project #1, this service holds an API key and costs money per request — and you deliberately cut authentication from its scope. A public endpoint is therefore a bill a stranger can run up and a key you will have to rotate.
Put it behind platform-level auth, an IP allowlist, or run it as a short-lived instance you bring up for demos and take down afterwards. Pair it with the recorded demo and the written walkthrough so nothing depends on the service being awake when someone opens your CV. Keep the hard spend cap you set in Week 0.
Week 37 — Buffer. Final polish, the written walkthrough, and a recorded demo. Put v0 and Project #3 side by side in that walkthrough, with each one's numbers — the contrast between the naive demo and the measured system is the strongest single artifact you own. This is the artifact the job-search block starts from, whenever that is.

Job-search block — keyed to a date, not a week

Start: twelve weeks before a search date you set. Not scheduled inside the 41 weeks. This block exists so that when you do decide, nothing has to be designed — only started.

Why it is separate. You are not searching yet, and a search has its own hours: applications, outreach, mocks, take-homes, and real interview loops run to 4–6 hrs/week on their own, and a single take-home can be 4–8. Running them alongside the roadmap would mean either 14-hour weeks or a flagship that never gets hardened. Deferring also lets the DSA rebuild happen when it is useful — close to the screens, not a year before them.

The countdown

Weeks before the dateWhat starts
12Refresh the market scan first. The Week 0 file is stale by now. Pull 20 current postings the same way and re-check the primary and fallback roles you chose in Week 16 against them. This is the input to the platform decision below, and that decision can add six to eight weeks of learning — so it has to happen here, not two weeks before applications.
12DSA rebuild — 2.5 hrs/week, two sessions, NeetCode order: heap and backtracking, then graphs (grid BFS/DFS, adjacency lists, cycle detection, topological sort), then 1-D dynamic programming (climbing stairs, house robber, coin change, longest increasing subsequence, word break). About 30 new problems on top of the fluency base, every one timeboxed and re-solved. Graphs and 1-D DP are not optional — they are what a screen uses to separate "knows the easy patterns" from "can solve a medium cold".
12Design hour — one a week, alternating a concept refresh with a cold canonical design. The three recorded cold walkthroughs (URL shortener, rate limiter, chat or feed — 35 minutes each, no notes) happen here, at roughly 9, 6 and 3 weeks out. They are in this hour, not in the mocks, because eight mocks on a three-way rotation only reach design twice.
8Mock interviews — one a week, rotating strictly: ML concepts; a live coding problem under a timer with a human watching; system design, using Project #3 or whichever canonical design you last recorded. Rehearse out loud; reading about them is not practice.
6Positioning — one hour a week on the CV, LinkedIn, and GitHub profile, rewritten around "software engineer who ships ML systems", not "career changer learning ML". Write and rehearse the ninety-second spoken answer to "why are you moving from software engineering to ML".
Readiness check, same week. Twelve weeks is a plan, not a guarantee. Look at dsa/solved.md: if fewer than half of the last ten new problems were solved inside the timebox, or the first two mocks produced feedback you have not yet closed, move the date out by four weeks now — while moving it costs nothing — rather than discovering it in a real screen.
2Quick update of the scan. Skim for new postings since week 12 and adjust the target list; the full refresh already happened at countdown start.
0Applications open. Start with a two-hour weekly block: 2–3 targeted applications and 2 outreach messages, outreach first. After three weeks, adjust the counts from the time they actually took, not from the plan. Review what the applications are returning after six weeks, and change the target roles or the positioning if they are going quiet.
Where the hours come from. The test is whether the countdown start — the date minus twelve weeks — falls after Week 37, not whether the date does.
Countdown start after Week 37: the roadmap is finished and its ten hours a week are free. Preparation (weeks 12 to 1): 2.5 DSA, 1 design, 1 mock from week 8, 1 positioning from week 6, and the rest on keeping Project #3 alive, the optional tail chapters, or the platform gap below. Active search (week 0 on): the same, plus the 2-hour application block, and interview loops as they land.
Countdown start inside the roadmap: the countdown takes its hours from the learning block from that week on. The DSA 2.5 replaces the fluency hour and the design hour replaces the roadmap's where one is scheduled. Search hours grow as each activity starts, and the roadmap gets what is left of the ten:
Weeks 12–9: 3.5 search, 6.5 roadmapWeeks 8–7: 4.5 search, 5.5 roadmapWeeks 6–1: 5.5 search, 4.5 roadmapWeek 0 on: 7.5 search, 2.5 roadmap
The remaining stages take proportionally longer; the DSA rebuild is never cut to make room, since it is the reason the countdown exists.
Either way, a real interview loop is a collapsed week for the roadmap; see the minimum viable week.
Milestones are counts you control, not outcomes you do not. Applications sent, conversations attempted, projects demonstrated, mock feedback addressed, problems re-solved within the timebox. Referrals convert better than cold applications, so weight outreach — but a reply rate is a measurement, not a promise, and nobody can tell you in advance when interviews will land. Treat every claim in this section about what "works" as a hypothesis the first six weeks of data will test.

Roles this roadmap trains you for

Lead with the primary role you chose in Week 16 and the fallback alongside it. Your portfolio speaks directly to what they interview on, and your existing software engineering experience is the differentiator rather than the thing you are apologising for.

Applied AI Engineer
AI Engineer
Software Engineer — ML / AI
Backend Engineer — AI

Adjacent roles — reachable, but not fully covered here

Apply to these too; just know what you are missing so a gap does not surprise you in a screen.

Machine Learning EngineerClosest of the three. Expect deeper classical ML and modelling depth than 10 weeks provides, and more emphasis on data pipelines. Your Project #1 and #2 cover the shape of it.
ML Platform EngineerNeeds infrastructure this plan does not teach: cloud, Kubernetes, orchestration (Airflow or similar), and infrastructure as code.
MLOps EngineerSame gap. Weeks 12, 13, 31 and 32 give you the ML side of it, but not the platform side.
A decision to make when you set the date, not now. Closing the platform gap means roughly 6–8 more weeks — cloud fundamentals, containers at scale, an orchestrator, and Terraform. That is a real option, not a mistake, but make it once the countdown-start refresh of the scan is in front of you and you know whether those roles are the ones actually hiring. If the roadmap has finished and the date is not set, those weeks are the natural thing to fill the gap with. Do not stall the plan on this question in the meantime.

ML interview topics

Bias vs variance, overfitting, regularization, data leakage, cross-validation, feature engineering, class imbalance, model selection, and evaluation metrics.

Algorithm knowledge

Linear Regression, Logistic Regression, Decision Trees, Random Forests, Gradient Boosting, K-Means, PCA, and Neural Networks.

Deep-learning knowledge

Gradient descent, backpropagation, activation functions, loss functions, batch size, learning rate, Adam, dropout, normalization, embeddings, attention, transformers, and fine-tuning.

AI-engineering knowledge

RAG, embeddings, vector search, chunking, reranking, tool calling, agents/workflows, structured outputs, evaluation, hallucinations, latency, cost, caching, and prompt injection.

System design

The three canonical designs you can whiteboard unprompted — URL shortener, rate limiter (single-node and distributed), chat or news feed — plus the concepts behind them: estimation, load balancing, caching, sharding, replication, queues, consistency vs availability, WebSockets/SSE, fan-out. Then the two you built: an online prediction service (Project #1, scaled) and Project #3's RAG pipeline as a design answer — ingestion, chunking, embeddings, vector index, retrieval and reranking, the tool boundary, evaluation in CI, cost, freshness, and prompt injection. Lead with Project #3 whenever the interviewer lets you choose.

Coding screens

NeetCode 150 patterns through graphs and 1-D dynamic programming, in Python, under a timer, explained out loud. This is where a 0–2 year candidate is judged hardest, which is exactly why the rebuild is timed to land just before the screens rather than a year ahead of them.

Software fundamentals

System design is built up across the roadmap; DSA is kept warm during it and rebuilt in the countdown. Databases, APIs, testing, Docker, Git and CI/CD are covered by Weeks 2, 12, 13, 31 and 32 and by the three projects. Your mobile and backend experience is short but real — lead with what you have shipped, and let the portfolio do the rest.

Be ready for "how do you use AI in your own work?" — now a routine question, and one where an experienced engineer stands apart from a bootcamp graduate. The strong answer is specific about the boundary: what you delegate, what you refuse to delegate, and how you review what comes back. You will have lived that boundary for nine months by then; say so concretely rather than in generalities.

Your three-project portfolio

Project #1 — Classical ML Weeks 14–15

Demonstrates Scikit-Learn, EDA, feature engineering, cross-validation, model comparison, metric choice under class imbalance, calibration, pipelines, API design, and Docker.

The only one of the three left running at a public URL — it has no paid LLM call per request, so it is the one to expose; hosting charges remain subject to the selected platform's limits and the Week 0 hosting budget.

Project #2 — Deep Learning Weeks 23–24

Demonstrates PyTorch, Dataset/DataLoader, training loops, transfer learning, evaluation, experiment tracking, error analysis, and inference deployment.

Project #3 — Applied AI Weeks 27–36

Your flagship, and the one that gets the most calendar rather than the least. Demonstrates LLMs, RAG, embeddings, vector databases, reranking, one tool with failure tests, FastAPI, Docker, a runnable evaluation suite with a held-out set, monitoring, tests, and CI/CD.

Built across ten weeks rather than four: Weeks 27–30 produce it while you learn, Weeks 31–32 supply the production skills, and Weeks 33–36 harden it in about 35 hours. Auth, a UI, and a separate application database are cut; caching is in, measured. The measured evaluation suite is what makes the project persuasive — protect those hours ahead of everything else.

Plus the v0 spike from Week 5. Keep it public and keep it frozen. Shown beside Project #3 with both sets of numbers, the naive first attempt and the measured rebuild tell a better story about your growth than either does alone — which only works if you never went back and quietly improved the first one.

Weekly routine

One routine, all 41 weeks

DayHoursWork
Monday1Reading — the chapter or the week's theory
Tuesday1DSA — one new problem and one re-solve, 25-minute timebox, no AI
Wednesday1Maths (Weeks 1–5) → system design Weeks 6–33: one concept, one practice design, then the AI interviewer
Thursday1Chapter exercises / coding along
Friday1Chapter exercises / coding along
Saturday3Project work
Sunday2Project / review

10 hours, exactly: 3 topic + 1 DSA + 1 system design (or maths, before Week 6) + 5 building. The same table runs from Week 0 to Week 37 — there is no reduced-hours phase because there is no parallel job search. The week types differ only in where the hours point:

Week typeAllocation
Foundations (1–4, 4b)9 hours foundations, including the Wednesday maths hour + 1 DSA
Normal learning (6–13, 17–22, 26–32)8 hours learning and building + 1 DSA + 1 system design (Week 22: the design hour goes to the Project #2 dataset choice)
Dedicated project (5, 14–15, 23–24, 34–36)9 hours project + 1 DSA
Week 338 hours project + 1 DSA + 1 design (the recorded Project #3 session)
Extension and buffer (4b, 10b, 19b, 16, 25, 37)As the week's own note says; DSA runs as normal, and design where the track schedules a session

Anything a week adds — a retake, a dataset choice, a deployment, a README — replaces work inside those ten hours. Nothing sits on top.

The minimum viable week

When a week collapses — travel, a work crunch, illness — this is what survives. The cut-list handles falling behind over months; this handles a single week with about three hours in it.
Weeks 1–26: the DSA hour and 2 hours on the current week's chapter or project. Everything else — the design hour, the reading, the weekend build — pauses without guilt.
Weeks 27–37: the DSA hour and 2 hours on Project #3 — evaluation-safe work only; a collapsed week is not the week to touch the held-out set.
A real interview loop, whenever the job-search block starts, is a collapsed week for the roadmap — it is not squeezed in on top.
One collapsed week is not slippage and does not trigger the cut-list. Two consecutive collapsed weeks do. The one exception to "no guilt": a collapse on a project week (5, 14–15, 23–24) still costs that project its Saturday, and the following buffer absorbs it — do not let it quietly eat the stretch goals.

How to use AI while learning

You attempt it
   ↓
get stuck
   ↓
ask AI
   ↓
understand answer
   ↓
implement
   ↓
modify it yourself
Rule: if AI gives you code, you are not done until you can explain every important line in an interview.
Two places the loop above does not apply at all.
DSA problem-solving: no AI during the attempt — not for hints, not for "explain the problem", not for generating or completing a solution, and not during a re-solve from memory. Timebox → human-written editorial → then AI as a coach only: critique your edge cases, show alternative approaches, generate two or three more problems of the same pattern. It never writes the solution and never participates mid-attempt. The screen you are training for gives you a shared editor and a person; the reps only count if they happen under those conditions.
System design: you design alone first, every time. The AI's only role is interviewer — it asks the follow-ups and, at the end, lists what you missed. It never proposes a component, never draws the diagram, never "improves" yours. If it starts to, stop the session and restart it. Presenting Project #3 as a design answer is the one exception where it may also point out what a real interviewer would ask about your system — that is still attacking your design, not producing one.
Two modes — do not confuse them. The loop above is learning mode, and the rule above governs it. Leaning harder than that during the roadmap buys you working code and no ability to discuss it, which is exactly the trade an interview exposes.
Professional mode is a separate skill and an increasingly explicit hiring signal: scoping work for agentic coding tools, giving them the right context, reviewing what comes back, and knowing where they are reliably wrong. This is most of what "AI-capable software engineer" means to the people writing the job descriptions — and this plan builds AI systems without ever teaching you to work this way.
Practise it on the parts of your projects that are not the learning objective: scaffolding, Dockerfiles, CI configuration, test boilerplate, README drafts. Never on the model code, the retrieval logic, or the evaluation suite — those are the parts you must be able to defend line by line.
The evaluation suite is the sharpest case, and the reason is structural: if the same tool writes both the system and the tests that judge it, the tests confirm what you built rather than what you needed. That is a circle, and it produces a suite that passes while measuring nothing. Week 30 is the week it would cost you most — that suite is what the entire flagship rests on.
It costs no hours; it is a decision about how you work. And it is the one AI skill that pays off on both branches, whether or not the ML search converts.

Progress checkpoints

Every checkpoint has an externally verifiable artifact. "I feel like I understand it" is not a checkpoint — at 11pm on a Sunday you will always feel like you understand it.

Gate (before Week 0, up to 8 weeks): Backend fundamentals checked. Artifact: a file with your written answers to the three tasks, the data-structures check, the backup evidence, the week-four variation and its result, and the restart decision.
Week 0: Set up, and informed. Artifact: the market scan of 20 postings, the cut-list, the written data boundary, the Project #1 hosting decision — and the learn-test results file, which decides whether Weeks 4b and 10b run.
Week 4b (calendar week ~5, end of month 1): Python, NumPy, Pandas, SQL, and basic math. Artifact: mini-project repo, public; the Python and SQL learn-test artifacts produced without notes; dsa/solved.md with 5+ problems logged.
Week 5 (calendar week 6): Your first AI demo runs end to end. Artifact: public repo tagged v0, with an honest limitations section.
Week 16 (calendar week 18, ~month 4½): Classical ML, Scikit-Learn, serving, experiment tracking. Artifact: Project #1 public, live at a URL that responds, reviewed by another engineer — and your primary target role chosen in writing. DSA: 15+ problems logged, log committed. Design: ten system-design/wNN.md notes committed.
Week 25 (calendar week 28, ~month 6½): PyTorch, neural networks, transformer fundamentals. Artifact: Project #2 public with a written error analysis. DSA: 25+ logged. Design: seventeen notes committed, including the two consolidation sessions.
Week 30 (calendar week 33, ~month 7½): RAG, embeddings, reranking, tool calling, evaluation. Artifact: Project #3's foundation running, with a measured report on both the development and held-out sets, a committed rubric, and the recorded run-to-run variation. Design: Project #3 presented as a design answer twice (Weeks 28 and 30), with the interviewer's unanswered questions committed and the answerable ones closed.
Week 32 (calendar week 35): Production ML — CI, ML testing, monitoring, drift. Artifact: CI green on Projects #1 and #2; on Project #3, retrieval metrics on every push and the LLM-judged suite on its own schedule, both with thresholds.
Week 37 (calendar week 40, ~month 9½): A software engineer who can build, evaluate, deploy, and maintain ML/AI systems. Artifact: Project #3 hardened and privately deployed, with tests, evaluation, CI, monitoring, a recorded demo, and a walkthrough placing it beside v0 — with the recorded Week 33 design presentation as its architecture segment. DSA: 35+ logged, one problem every week since Week 1. Design: three Project #3 presentations on record.
Whenever you set a search date: the job-search block starts twelve weeks before it. Artifact by the date: 30+ rebuild problems logged including graphs and 1-D DP, three recorded canonical walkthroughs, eight mocks with feedback addressed, CV and profiles rewritten, and a refreshed market scan.
The goal is not to become an AI researcher in nine months. The goal is to become an experienced software developer who can also build, evaluate, deploy, and maintain ML/AI systems.