Software Developer → ML / Applied AI Engineer

A detailed 38-week (~8–9 month) roadmap built around Hands-On Machine Learning with Scikit-Learn and PyTorch, while keeping your current software development job. Buffer weeks and job-search time are budgeted, not assumed away.

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
StageWeeksMain goal
0Week 0Environment, compute plan, market scan, baseline
1Weeks 1–4Python, data, SQL, statistics, math foundations
1.5Week 5Early win — ship a small AI demo, tag it v0
2Weeks 6–16Classical ML, Scikit-Learn, serving, Project #1
3Weeks 17–25PyTorch, deep learning, transformers, Project #2
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
6From Week 26, in parallelInterviewing + applications

8–10 hrs/weekKeep current jobBuild while learning3 serious projects3 buffer weeks~340 hrs — ~290 learning + ~50 job search

Check your book edition first. Stage 3 assumes an edition of Géron built on PyTorch. The widely-circulated 3rd edition is Scikit-Learn, Keras and TensorFlow — if that is the copy you own, Stages 1–2 still apply as written, but you will need separate PyTorch material (the official PyTorch tutorials, or a dedicated PyTorch book) for Weeks 17–22.
How the 38 weeks are spent: 1 setup week, 25 weeks of instruction, 9 weeks of dedicated project building, and 3 buffer weeks. Across the final 12 weeks (26–37), learning hours are deliberately reduced to make room for the job search.
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 makes the flagship achievable in the hours that actually remain — see Stage 5.

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: nine hours covers the market scan, the installs, the compute decision, and the book mapping. If installs go badly, the scan and the mapping 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 Stage 6. For each, note the title, the modelling depth asked for, whether cloud, Kubernetes, or an orchestrator appears, and whether they want RAG and evaluation or classical ML.

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 at the end of Stage 6 stops being hypothetical. If none of them do, you can stop carrying that worry for eight months.

Install and configure

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

Skip what you can already prove

You are an experienced software developer, and parts of this plan are written for someone who is not. Do not sit through them out of diligence. Each skip is earned by producing an artifact this week — not by feeling confident about it.

WeekSkip it if, in one sitting, you can…
1 — PythonWrite a class with a context manager, a generator, and type hints, and explain a decorator you did not write
2 — the SQL halfWrite a three-table join with a group-by and a window function from memory, with no reference open
12 — FastAPI + DockerProduce a containerized API with a request/response schema that a stranger can start with one docker run
31 — the CI halfAdd a working CI workflow that runs tests on push, from scratch

Bank every hour you save. It goes to Week 22 (attention), Week 27 (retrieval quality), or Project #3 — the three tightest points in the plan. It does not go to finishing early.

Decide your compute and cost plan now

Week 21 fine-tunes a pretrained vision model and Stage 4 calls paid LLM APIs. Both fail late and expensively if you have not decided where they run. Settle this in Week 0, not in Week 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.
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.

Map the book to the schedule

Twenty minutes, this week. Open your copy of Géron, and write the chapter numbers next to the week table in this plan. Two things fall out of that exercise:

Name a source for every orphaned week before this week ends. Discovering in Week 28 that you have no material is the same failure as discovering in Week 21 that you have no GPU — it just arrives later and costs more. Write one primary resource next to each of Weeks 5, 12, 13, and 26–32. The durable, first-party places to start:

Deliberately not pre-filled here: a chapter map for an edition you may not own, and deep links that rot within a year. Both would be confidently wrong, which is worse than absent.

Pre-write your cut-list

Three buffer weeks across 38 is roughly 8% slack — thin for eight 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 rule: if you reach a buffer week already behind, cut from this list rather than extend the schedule. In order:

  1. Week 11 clustering — read for awareness, build nothing.
  2. Week 3 confidence intervals and sampling theory — know the vocabulary, move on.
  3. Week 9 tree internals — Gini versus entropy is not worth a week of slippage.
  4. Week 21 computer vision — only once you have committed to the text path for Project #2.
  5. Project #2 collapsed from two weeks to one — last resort, and it costs you the error analysis.

Nothing in Stages 4 or 5 appears on this list. Those weeks are the portfolio.

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 chapter map with a named source beside every orphaned week, the cut-list, and the written data boundary. None takes long. All four are worth more in Week 26 than they are today.

Stage 1 — Foundations

Duration: Weeks 1–4

Do not spend months preparing before touching ML. Four focused weeks are enough to start.

Week 1 — Python for data work

Review lists, dicts, sets, tuples, comprehensions, functions, lambdas, classes, exceptions, context managers, iterators, modules, packages, and type hints.

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
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.
External proof: the mini-project is pushed to a public GitHub repo with a README a stranger could follow.

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 deliberately: random splits are the default and are wrong more often than people expect.
Time-based when predictions are about the future — churn, fraud, demand. Train on earlier periods, test on later ones, or you are predicting the past.
Group-based when 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.
Both of your likely Project #1 candidates (churn, fraud) need one of these.

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 flatter you on Project #1. Churn, fraud, and loan default are all imbalanced, and ROC-AUC stays high on imbalanced data because the true-negative pool is enormous. Report PR-AUC alongside it — precision-recall curves ignore true negatives and expose the degradation ROC hides.
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.

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, Extra Trees, AdaBoost, Gradient Boosting, Histogram Gradient Boosting, stacking, and feature importance.

Compare Logistic Regression, Decision Tree, Random Forest, and Gradient Boosting on the same problem.

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.

Deliberately trimmed: DBSCAN, Gaussian mixtures, and anomaly detection are cut from the schedule. Six topics do not fit in nine hours, 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.

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.

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 or group-based per Week 6 — churn and fraud both need one); 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 that beats it, 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 a managed platform on a free or near-free tier and keep the URL live. Project #1 is the right project to expose publicly: it holds no API keys and costs nothing per request, so an open endpoint is safe here in a way Project #3's will not be. Budget two hours in Week 15 or the Week 16 buffer.
A link an interviewer 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.
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, 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 Stage 6 platform decision 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

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 20 — Training deep networks

Study vanishing gradients, initialization, ReLU, normalization, gradient clipping, Adam/AdamW, learning-rate scheduling, dropout, weight decay, and transfer learning.

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 is the first week to trade away. 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. If you chose MLE, keep it 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 3 hours): load and run a pretrained model through Hugging Face, and know the BERT vs GPT-style distinction, in-context learning, and instruction tuning well enough to hold a conversation. You will use all of these constantly in Stage 4 without needing to have trained one.

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.
Your CV and profiles are due in Week 24, not Week 25. Applications open in Week 26, and parking this work in the Week 25 buffer sets it against that buffer's real job of absorbing Stage 3 slippage. The two collide precisely when Stage 3 has run long — which is exactly when you are least able to write well about yourself. Week 26 then arrives and you apply with nothing ready.
Instead, spend one weekday hour per week from Week 20 through Week 24: CV, LinkedIn, and GitHub profile, all rewritten around "software engineer who ships ML systems" rather than "career changer learning ML". Five hours, spread thin, off the critical path. From Week 16, also start quietly following people who hold the roles you scanned in Week 0 — you want a few names to approach in Week 26, not a cold start.

Weeks 23–24 — Project #2

Two weeks, not 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.

As with Project #1, choose the dataset and the target metric in Week 22 rather than Week 23, and 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. Interviewers ask about this.

Week 25 — Buffer. Catch-up, or use it to finish the error analysis properly. Your CV and profiles are already done — you wrote them across Weeks 20–24 — so this week can absorb Stage 3 slippage without costing you the start of the job search.
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. From this week onward the job search runs in parallel — see Stage 6 for how the hours split.

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 20 hours — nowhere near enough to build a production RAG system from scratch, but comfortably enough to harden one that already exists and has been measured for six weeks. 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.

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, and it sits on the Stage 6 interview list, 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.

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 50 to 60 questions against your documents, recording for each which chunk or page should answer it. Then split them, and commit the split:
Development set (~40 questions) — what you iterate against all through Weeks 27–29. Run it constantly. Tune chunking, embeddings, and reranking against it freely.
Held-out set (~20 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 chunk lands in the top k) and MRR (how high it ranks). 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 set of 20 questions 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. Split 20 questions in half and each half moves in 10-point jumps, so you cannot distinguish a real improvement from noise. Writing sixty questions is one dull afternoon; it is also what makes every number you quote in an interview defensible.

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.

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: add expected answers alongside the expected sources, 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 sources actually support the answer?), faithfulness and hallucination rate, task success, tool success, latency, and cost per query.

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 in an interview — and it is what Week 31's CI will run.

Now open the held-out set — once. With the suite built and your development numbers as good as you can get them, run the 20 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 if you want another clean measurement in Week 35, write fresh questions rather than reusing 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 can state, with numbers, how much worse your v0 demo was than the system you now have — and name the three specific things that made it worse.
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 command on every push 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.

Week 32 — Monitoring + drift

Learn service health, latency, error rates, data drift, prediction drift, model degradation, LLM evaluation regressions, and cost monitoring.

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 reduced Stage 6 rate of 5 hrs/week — about 20 hours, not the 36 an uninterrupted schedule would give you. The job search peaks in exactly these weeks and takes priority.

Twenty 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
34FastAPI endpoint, answer generation with sources, error handling, the Week 29 tool wired in with its failure paths
35Full test suite, evaluation running in CI on every push, and a fresh set of 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, caching, and a separate application database. They are the first things people build and the last things an interviewer 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.
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 interviews 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. By now you should be several weeks into interviewing, and this project should already be the thing you talk about.

Stage 6 — Interview + job transition

Start: Week 26. Runs in parallel for the remaining twelve weeks. Do not wait until the roadmap is complete.

The job search needs its own hours. Applications, referrals, mock interviews, and take-homes are 4–6 hrs/week on their own, and they land in exactly the weeks where the learning plan is already full. From Week 26, cut learning to roughly 5 hrs/week and spend the rest on the search. This is why the roadmap is 38 weeks rather than 30 — the last three months are not full-throttle study weeks, and pretending otherwise is how these plans fail.

Weekly job-search activities from Week 26

Applications5–10 targeted per week. Targeted beats volume — a role you can speak to specifically is worth twenty generic submissions.
Referrals5 outreach attempts per week to people in the roles you want. Measure the attempts, which you control — not the replies, which you do not. Referrals still convert far better than cold applications.
Mock interviewsOne per week from Week 26 — the same week applications open, not four weeks later. ML concepts, coding, and ML system design. Rehearse out loud; reading about them is not practice.
PositioningAlready done, in Weeks 20–24: CV, LinkedIn, and GitHub rewritten around "software engineer who ships ML systems", not "career changer learning ML". Revisit only when a specific role earns the edit.
Start mock interviews in Week 26, not Week 30. Applications open in Week 26 and take two to four weeks to convert, so your first real interviews land around Week 29 — before any practice has happened. Deferring mocks to Week 30 means spending your first four weeks of genuine interviews learning how to interview, and spending them on the companies you applied to first. Those are usually the ones you researched most carefully and want most.

Roles this roadmap trains you for

Apply to these from Week 26, leading 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 around Week 26, not now. Closing the platform gap means roughly 6–8 more weeks — cloud fundamentals, containers at scale, an orchestrator, and Terraform — which pushes the roadmap past ten months. That is a real option, not a mistake, but make it once you have live postings in front of you and know whether those roles are the ones actually hiring.
By Week 26 you hold three things you lacked in Week 0: the market scan, the primary role you committed to in Week 16, and a few weeks of real responses to your applications. If the scan showed cloud and Kubernetes in most postings and your applications are going quiet, that is your answer. 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.

Keep your software skills strong

Continue practicing data structures, algorithms, databases, APIs, distributed systems, system design, testing, Docker, cloud, Git, and CI/CD. This is your existing advantage — do not let it decay while you chase the new material.

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 holds no API keys and costs nothing per request, so it is the one that is safe to expose.

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 inside the ~20 hours the job search leaves. Auth, a UI, caching, and a separate application database are cut. 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

Weeks 0–25 — learning phase

DayWork
Monday1 hour reading
Tuesday1 hour coding examples
Wednesday1 hour math / theory
Thursday1 hour exercises
FridayOff
Saturday3 hours project work
Sunday2 hours project / review

Roughly 4 hours learning + 5 hours building each week. From Week 20 to Week 24, one weekday hour goes to CV and profile work instead.

Weeks 26–37 — learning + job search

BlockHours
Learning / project building5 hours
Applications + outreach attempts2–3 hours
Interview practice + mock interviews1–2 hours

Total stays around 9 hours. The mix changes; the load does not increase.

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.

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.

Week 0: Set up, and informed. Artifact: the market scan of 20 postings, the chapter map with a named source beside every orphaned week, the cut-list, and the written data boundary.
End of Month 1 (Week 4): Python, NumPy, Pandas, SQL, and basic math. Artifact: mini-project repo, public.
Month 1.5 (Week 5): Your first AI demo runs end to end. Artifact: public repo tagged v0, with an honest limitations section.
End of Month 4 (Week 16): 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.
End of Month 6 (Week 25): PyTorch, neural networks, transformer fundamentals. Artifact: Project #2 public with a written error analysis. CV and profiles were finished back in Week 24.
Month 7 (Week 30): RAG, embeddings, reranking, tool calling, evaluation. Artifact: Project #3's foundation running, with a measured report on both the development and held-out sets — plus 20+ applications sent, 20+ outreach attempts made, and mock interviews weekly since Week 26.
Month 7.5 (Week 32): Production ML — CI, ML testing, monitoring, drift. Artifact: CI green on Projects #1 and #2, and running the evaluation suite on every push to Project #3.
End of Month 8.5 (Week 37): 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 — and interviews already in progress.
The goal is not to become an AI researcher in eight months. The goal is to become an experienced software developer who can also build, evaluate, deploy, and maintain ML/AI systems.