plan.md

Modernization plan — 2026-2027 interview prep

17 min read source

Modernization plan — 2026-2027 interview prep

Master plan for bringing all 1,008 notes to a current, consistent, interview-ready state. Supersedes COVERAGE_AUDIT.md (2026-05-29 snapshot, partly stale), new session.md, and the outer ../REPORT.md — all three get deleted in Phase 0.

Created 2026-08-08. Facts verified against STACK_BASELINE.md.

Resume here

All phases (0-11) are complete as of 2026-08-10.

Verified by tooling: 1,073 markdown files, 0 broken relative links, 0 stubs, 0 emoji, 0 **Answer:** blocks, 0 files off-style. Every content file ends in ## Interview angle or ## What a senior is expected to say; the only files without a closing section are the control documents, folder indexes, and techcheck/ navigation maps, which is correct.

What remains

Nothing blocking. The open items are deliberate depth choices, tracked in frontend/_TODO.md and the “Known gaps” sections of the folder READMEs:

  • No dedicated React Router note (Vue Router now has one).
  • 05_react Server Actions / forms (useActionState, useFormStatus) have no worked example.
  • Go, Scala, Node.js depth, options pricing and DICOM remain uncovered, deliberately. The MINT ones are listed in techcheck/mint_tech_check/01_prep_map.md.
  • STACK_BASELINE.md needs re-verification roughly quarterly. Last full pass 2026-08-08; Vue, data-engineering, quant, healthcare and AI-tooling rows verified 2026-08-10.

How to pick up cold

  1. Read CLAUDE.md for the style rules, then STACK_BASELINE.md for current versions. Re-verify baseline rows older than ~3 months with a web search before asserting anything - it was last verified 2026-08-08.
  2. Check the Progress table at the bottom of this file, and LEDGER.md for per-folder state.
  3. git log --oneline main..HEAD shows everything this effort has done; each commit message explains its reasoning.
  4. After any change: python _tools/check_links.py must pass, then python _tools/gen_ledger.py, then commit.

Conventions in flight

  • Every new file ends with ## Interview angle. No emoji, no **Answer:** blocks.
  • Legacy files parked for a later phase get a _pending_ prefix rather than being deleted.
  • Forward references to unwritten folders are plain code spans, not links, so the checker stays green. All ai_ml/ forward references were converted to real links in the phase 3.6 cross-link pass.

Decisions locked in

Decision Choice
Primary focus Backend Python + AI/ML — all ML themes, foundations → advanced (classical ML, deep learning, LLM, RAG, agentic AI, MCP, MLOps)
Secondary, still covered Frontend, DevOps/platform
Fact sourcing Web-verify everything; re-verify STACK_BASELINE.md rows older than ~3 months
Stubs & duplicates Prune aggressively — delete rather than pad
Style One style: the senior style in CLAUDE.md. No emoji headers, no **Answer:** blocks.

Current state

Measured by _tools/gen_ledger.py. Left column is where this effort started; right is now.

Metric At start Now
Content files 1,005 1,068
Lines 215,294 207,192
Files off-style (emoji or **Answer:**) 178 0
Files with a closing Interview angle section ~380 all 906 content files
Stub files 45 0
Broken relative links 6 real 0
Largest single file 9,850 1,561
ai_ml/ files 44 124
ai_ml/ lines 15,554 16,957
frontend/06_vue/ files 15 25
Vacancy technologies with zero coverage 16 0

Fewer lines and more files is the intended direction: ~13k lines of vendored, duplicated and scaffolding content removed, ~9k lines of dense new material added.

The four problems

  1. Inconsistency — three coexisting writing styles (senior / **Answer:** Q&A / emoji-header), 178 files off-standard (measured by _tools/gen_ledger.py).
  2. Staleness — Python 3.11 baseline (3.14 is current), GPT-4 & Llama-2 as the model examples, Kafka 2.4 (4.x removed ZooKeeper), React 18/19 mixed with class-era React, Postgres 12, Django 4.2, uv mentioned 3 times.
  3. Missing themesall of classical ML and MLOps, plus LLMOps, context engineering, eval harnesses, KV cache / speculative decoding / MoE / reasoning models, prompt-injection depth, K8s Gateway API, OpenTofu, FinOps, EU AI Act.
  4. Structural debt — 45 stubs, one 9,850-line file, 04_async_concurrency has 34 files with a thin Q-cluster duplicating the deep ones, ai_ml/03,04,05 have 12 files under 60 lines, and all three meta-docs contradict each other.

Phase 0 — Foundation

One session. Do this before touching any content.

  • Triage the 20 uncommitted changes — review each, commit the good ones, discard the rest. Clean tree before starting.
  • Rewrite CLAUDE.md as the single 2026-2027 standard. Fix its lies: it says “repo name says py_js” and “5 top-level folders” (there are 8). Add: the currency rule (check STACK_BASELINE.md), the one-style rule, the date-your-claims rule.
  • Delete COVERAGE_AUDIT.md, new session.md, ../REPORT.md — this file replaces them.
  • Fix frontend/_TODO.md — it links to ../AUDIT.md, which does not exist.
  • Create LEDGER.md — one row per file with columns: path · reviewed? · style OK? · current? · verdict (keep/rewrite/merge/delete). This is what makes “go step by step through all docs” survive across sessions.
  • Decide the nesting: left as-is (the git repo stays nested rather than being promoted to the parent). Promoting it would rewrite every path in the outer tooling for no content benefit. The outer folder now holds only todo.txt.
  • Renamed py_questions/ -> py-prep/ on 2026-08-10. python-questions was wrong on both words: not only Python, and no longer a question dump.

Exit criteria: clean git tree, one truthful CLAUDE.md, one plan, one ledger.


Phase 1 — Whole-repo sweeps

One session. Cheap, mechanical, high value.

  • Version sweep — grep every version string against STACK_BASELINE.md and fix. Known hit list: Python 3.11×17, React 18×31 + React 15/16/17 remnants, Kafka 2.4/2.8, Postgres 12/13, Redis 4.0/5.0, Django 4.2, node10/14/16, Next.js 13.
  • Model-name sweep — replace GPT-4 (33 files), GPT-4o (14), Llama-2, claude-sonnet-4-5 with the current roster. Prefer capability-neutral phrasing (“a frontier model”) where the specific model doesn’t matter, so this ages better.
  • Link integrity — check every relative markdown link resolves; fix the broken ones.
  • Rebuild root README.md — the index is missing ai_ml/08, system_design/06–07, backend/29, frontend 14–19, claude_certification/, techcheck/.

Deferred on purpose:

  • React version drift -> phase 7. It needs a rewrite around React Compiler 1.0, not a find-replace; blind substitution would corrupt correct history like “React 16.3 introduced getDerivedStateFromProps”.
  • Model names inside ai_ml/ -> phase 3, which rewrites those files wholesale. Only the 2 occurrences outside ai_ml/ were fixed now.
  • Feature-availability markers (“StrEnum introduced in 3.11”, “except* requires 3.11+”, “App Router (Next.js 13+)”) were left alone - they are correct history, not staleness.

Exit criteria: no version string in the repo contradicts STACK_BASELINE.md; every link resolves. Both verified - _tools/check_links.py reports 0 broken across 1,010 files.


Phase 2 — Prune

One session. Deletions only — no writing. Do it in one commit so it’s easy to revert.

  • Delete the AWS long-tail stubs (Business_Applications/*, Cloud_Financial_Management/*, Compute/{Lightsail,Outposts,Wavelength,VMware,App_Runner,Batch,Beanstalk,Image_Builder,Serverless_App_Repo}, Containers/{App2Container,OpenShift}, Developer_Tools/{CodeDeploy,CodePipeline}). Keep the AWS services a Python/AI role is actually asked about: Lambda, API Gateway, DynamoDB, S3, SQS, SNS, EventBridge, Step Functions, ECS/EKS/Fargate, RDS/Aurora, ElastiCache, VPC, IAM, Secrets Manager, KMS, CloudWatch, Bedrock.
  • Delete the 20_cloud_azure / 21_cloud_gcp 1-line placeholders — or replace each with a single real “what maps to what” comparison note. Do not keep an empty folder.
  • Merge 04_async_concurrency 33 → 17 files (+ README). Folded the thin Q-cluster into the deep files, collapsed triple GIL and triple event-loop, and turned the shield/completion/error-handling trio into one real 13_cancellation_timeouts_errors.md. Renumbered contiguously and rewrote every inbound link; .py demos moved to _examples/.
  • Deferred to phase 3 on purpose. Phase 3 rewrites ai_ml/ wholesale, so merging these thin files now would be thrown away. Not a skip - a sequencing decision.
  • Folded fastapi/13_di_container.md into 03_dependencies_and_injection.md as a “do you need a DI container?” section rather than deleting - the content was short but genuinely useful. Also removed django/00_django.md, which was a bookmark list masquerading as a numbered note; its links now live in a new django/README.md.
  • Deleted the empty frontend/05_react/use_callback.md. Its topic is compiler-era memoization, which is a phase 7 rewrite.
  • Not a split - a removal. frontend/05_react/README.md turned out to be a vendored copy of the sudheerj/reactjs-interview-questions repo: 403 third-party markers, 5 UTM-tracked sponsor banners, 84 class-component-era references, 10 mentions of modern React. The 29 sibling files already cover React in the repo’s own style. Replaced with a real index naming the gaps it leaves (React Router, Server Actions, React Compiler).
  • Housekeeping: folded frontend/*/links.txt bookmarks into their folder READMEs; deleted the orphaned 17_concurrency_vs_parallelism.png, the two _int_format/_answer_examples .txt files (superseded by their .md versions), and the stale outer repotree.txt. backend/image.png and the PDF were already gone. backend/links.txt is gitignored personal scratch - left alone.

Exit criteria / actual result: 1,005 -> 958 files (-47), 215,294 -> 201,972 lines (-13,322). Largest file 9,850 -> 1,561 lines. Stubs 45 -> 11.

The 11 remaining stubs are all real topics that need writing, not deletion candidates - alembic, mysql, sqlite, valkey, rq, ansible, formatters, linters, integration tests, flask, litestar. They are filled in their own domain phases (4-6), because writing them needs the domain context of that pass.


Phase 3 — AI/ML rebuild

4–6 sessions. This is the main focus and the largest gap.

ai_ml/ is 44 files and covers LLMs only. Verified zero coverage of: linear/logistic regression, cross-validation, confusion matrix, bias-variance, gradient descent, backpropagation, CNN, RNN/LSTM, batch norm, MLflow, MLOps, model registry, feature stores, scipy. Target is roughly 150 files.

Target structure

Folder Status Content
00_math_foundations/ new linear algebra, probability, statistics, calculus for ML — the “explain gradient descent on a whiteboard” layer
01_ml_foundations/ new supervised/unsupervised/RL, train-val-test, bias-variance, overfitting, the ML lifecycle
02_classical_ml/ new linear/logistic regression, decision trees, random forest, XGBoost/LightGBM/CatBoost, SVM, kNN, naive Bayes, clustering, PCA
03_feature_engineering/ new encoding, scaling, selection, leakage, imbalanced data/SMOTE, feature stores
04_model_evaluation/ new cross-validation, precision/recall/F1, ROC-AUC vs PR-AUC, confusion matrix, calibration, metric choice by problem
05_deep_learning/ new perceptron → backprop, optimizers, CNN, RNN/LSTM, regularization, batch norm, transfer learning
06_transformers_llm/ rewrite 01_llm_fundamentals attention, KV cache, MoE, reasoning models, test-time compute, tokenization, context windows
07_training_finetuning/ expand pretraining, SFT, RLHF/DPO, LoRA/QLoRA, distillation, quantization
08_inference_serving/ new vLLM, continuous batching, speculative decoding, KV-cache management, latency/cost/throughput trade-offs
09_rag_embeddings/ refresh hybrid search, rerankers, chunking strategies, GraphRAG, agentic RAG, pgvector, eval of retrieval
10_agents_orchestration/ rewrite LangChain/LangGraph 1.0 (middleware, durable execution), multi-agent, planning, ReAct, A2A
11_mcp/ expand from 1 file spec 2026-07-28: stateless core, tools/resources/prompts, transports, auth, building servers/clients
12_context_engineering/ new context windows, compaction, memory systems, sub-agents, retrieval-vs-context trade-off
13_evaluation/ thin → build offline/online eval, LLM-as-judge, RAGAS, regression suites, A/B testing, test-set design
14_guardrails_safety/ new prompt injection (OWASP LLM Top 10), jailbreaks, PII, output validation, EU AI Act
15_mlops_llmops/ new MLflow, model registry, drift detection, monitoring, CI/CD for models, OTel GenAI conventions
16_ml_frameworks/ refresh PyTorch, TensorFlow, scikit-learn, JAX; Optuna/AutoGluon
17_ml_system_design/ new design a recommender, fraud detection, search ranking, a RAG chatbot at scale, an agent platform

Progress

  • 3.1 done (2026-08-08). Restructured ai_ml/ into the target numbering and rewrote every inbound link. Wrote 00_math_foundations/ (4 files), 01_ml_foundations/ (6), 02_classical_ml/ (9), plus folder READMEs and an ai_ml/README.md index. 2,329 lines of new content; all files carry an ## Interview angle section and none use the legacy styles.
  • 3.2 done (2026-08-08). 03_feature_engineering/ (6 files), 04_model_evaluation/ (6), 05_deep_learning/ (7), plus folder READMEs. 2,373 lines. Converted the phase-3.1 forward references into real links now that their targets exist.
  • 3.3 done (2026-08-08). Rewrote 06_transformers_llm/: deleted 4 legacy Q&A files (3,831 lines of GPT-4-era content), wrote 8 new files covering architecture, GQA/MLA, tokenization, RoPE, KV cache, MoE, reasoning models and context windows. Built 07_training_finetuning/ (4 new + the rehomed fine-tune-vs-RAG file) and 08_inference_serving/ (2 new). The 731-line ethics file is parked as _pending_14_ethics_and_safety.md for rewrite in 3.5.
  • 3.4 done (2026-08-08). MCP expanded 1 -> 3 files for the 2026-07-28 stateless-core revision. Agents rewritten 15 -> 12 files: deleted 10 pre-1.0 files (2,740 lines) and wrote 7 covering the agent loop, LangGraph 1.0 middleware and durable execution, multi-agent patterns, MCP-vs-A2A, and failure modes. RAG gained hybrid search + reranking and agentic RAG + evaluation. Context engineering rebuilt from 4 thin files to 2 real ones.
  • Forward references to folders arriving in 3.5-3.6 are written as plain code spans rather than links, so the link checker stays green. Each sub-phase relinks the ones it creates; 3.6 sweeps the rest.

Suggested session split: (1) 00–02 foundations + classical, (2) 03–05 features/eval/DL, (3) 06–08 transformers/training/serving, (4) 09–12 RAG/agents/MCP/context, (5) 13–15 eval/guardrails/MLOps, (6) 16–17 frameworks + ML system design.

Exit criteria: a classical-ML interview question (“explain bias-variance”, “which metric for an imbalanced fraud dataset”, “how would you detect drift in production”) is answerable from these notes.


Phase 4 — Backend Python core

2–3 sessions. Every file read and brought to standard.

  • 02_python_core (34 + typing 7 + stdlib 8 + performance 6 + packaging 4 + tricky 48) — Python 3.14 baseline; rewrite the 7 emoji-style files; new notes on t-strings (PEP 750), deferred annotations (PEP 649), subinterpreters (PEP 734); make uv the primary answer in packaging.
  • 03_python_oop (10 files, 7 in emoji style) — restyle; content is deep and good, keep it.
  • 04_async_concurrency — after the Phase 2 merge, rewrite the GIL and threads-vs-processes story around free-threading being official in 3.14. This is the single most-changed Python interview topic since these notes were written; subinterpreters are now a fourth option.
  • 05_testing — fill the integration/ stub; pytest + hypothesis current.
  • 01_theory_foundations — SOLID/patterns are timeless; verify only.

Phase 5 — Backend platform & data

3–4 sessions. Ordered by your own interview debrief in techcheck/questions.md.

  • Architecture (13_architecture_design, 14_microservices) — monolith vs microservices, clean architecture, EDA, outbox, saga + the distributed-rollback/compensating-transaction scenario your debrief names.
  • Databases (08_databases) — Postgres 18, SQLAlchemy 2.0 async, sharding, indexes, isolation. Fill 16_alembic, 17_mysql, 18_sqlite.
  • Queues (10_message_queues) — Kafka 4.x/KRaft rewrite (biggest staleness in this area), RabbitMQ, Celery, Temporal. Fill rq/01.
  • Caching (09_caching) — Redis 8, the license split, fill the valkey/ stub.
  • Protocols/web (06_web_frameworks, 07_rest_apis, 12_protocols) — FastAPI 0.136/Pydantic v2, Django 6.1 (5.2 LTS), fill or drop flask/ and litestar/. Restyle the 9 **Answer:** FastAPI files and 8 Streamlit files.
  • Auth/security (11_authentication, 25_security) — add passkeys/WebAuthn depth, supply chain/SBOM.

Phase 6 — DevOps / platform

2 sessions.

  • 16_docker, 17_kubernetesK8s Gateway API (currently 0 mentions, GA and replacing Ingress), probes/HPA, python:3.14-slim.
  • 18_iac — Terraform + the BSL license split / OpenTofu story (0 mentions); fill 02_ansible.
  • 27_cicd, 26_code_quality — Ruff + uv in CI; fill 01_formatters and 02_linters; SBOM/SLSA.
  • 15_observability — OpenTelemetry current, OTel GenAI semantic conventions for LLM tracing.
  • 19_cloud_aws — after pruning, deepen the kept services; add Bedrock/AgentCore depth for the AI angle.
  • New: FinOps, platform engineering, progressive delivery (already drafted, uncommitted).

Phase 7 — Frontend

2 sessions.

  • Rewrite the 74 emoji-header files — concentrated in 05_react (18), 03_javascript_core (8), 07_state_managers (9).
  • React Compiler 1.0 — this is a guidance change, not a version bump: auto-memoization makes most useMemo/useCallback advice in these notes actively wrong. Rewrite the memoization notes around it.
  • React 19.2 baseline; Server Components / Actions; Next.js 15+.
  • Finish the Phase 2 split of the 9,850-line React README.

Phase 8 — System design, DSA, behavioral

2 sessions.

  • system_design — restyle the 20 **Answer:** files; add first-class load balancing, CDN, replication/sharding, consistency models; deepen the 8 worked designs with data models and capacity math.
  • 24_dsa — add the absent patterns: monotonic stack, intervals, matrix, BST, tries, 2D DP/knapsack/LCS/edit-distance, greedy, bit manipulation.
  • behavioral — files 01–11 are 20–58 lines and AI-workflow-heavy; make them real STAR stories. Add the 2026 questions: how you use coding agents, how AI changed your architecture and review practice.
  • claude_certification — 7 single-README folders; refresh against the current MCP spec and Claude model roster.

Phase 9 — Final verification

1 session.

  • Every row in LEDGER.md marked reviewed.
  • Re-verify STACK_BASELINE.md end to end (it will be months old by then).
  • Full link check; rebuild README.md; confirm one consistent style repo-wide.
  • Optional: publish as an MkDocs Material site — the structure already supports it.

Working rules

  1. One phase per session. Bundling causes sprawl — this repo has that scar already.
  2. Read before you write. Every file in a phase’s scope gets opened, not just the ones that look wrong.
  3. Web-verify before asserting. Any version, release date, or “X is deprecated” claim gets checked. Update STACK_BASELINE.md when you learn something new, in the same commit.
  4. Update LEDGER.md in the same commit as the content change.
  5. Commit per logical group; don’t push unless asked.
  6. Delete freely. A 1-line stub is worse than no file — it implies coverage that isn’t there.
  7. Date what will rot. “As of 2026-08, …”.

Progress

Phase Scope Status
0 Foundation done 2026-08-08
1 Whole-repo sweeps done 2026-08-08
2 Prune done 2026-08-08
3.1 AI/ML - math, ML foundations, classical ML done 2026-08-08
3.2 AI/ML - features, evaluation, deep learning done 2026-08-08
3.3 AI/ML - transformers, training, serving done 2026-08-08
3.4 AI/ML - RAG, agents, MCP, context engineering done 2026-08-08
3.5 AI/ML - evaluation, guardrails, MLOps done 2026-08-09
3.6 AI/ML - frameworks, system design, cross-link pass done 2026-08-09
4 Backend Python core done 2026-08-09
5 Backend platform & data done 2026-08-09
6 DevOps / platform done 2026-08-09
7 Frontend done 2026-08-09
8 System design, DSA, behavioral done 2026-08-09
9 Final verification done 2026-08-09
10 Style unification + depth pass done 2026-08-10
11 Vacancy gap closure (6 live Python roles) done 2026-08-10

Phase 11 — vacancy gap closure (2026-08-10)

Audited the repo against the combined technology list of six live Python vacancies. 16 technologies had zero coverage; 4 more had one file. Everything below closes those gaps.

New Closes
backend/30_quant_fintech/ (9 files) market data and its biases, backtesting, vectorbt/Backtrader/QuantConnect, portfolio optimization, ML for finance, FIX protocol, Python performance for quant, trading risk and production
backend/31_healthcare_regulated/ (5 files) HL7 v2, FHIR R4/R5/R6, OMOP, CDISC, terminology mapping; PHI/HIPAA/BAA, de-identification; GxP, ALCOA+, 21 CFR Part 11, CSV and the risk-based CSA approach; clinical document intelligence
backend/29_data_engineering/06_data_architecture/ (4 files) data mesh, data contracts, federated architecture; ELT/CDC/idempotent backfills, Airflow 3, dbt + Fusion; catalogue, governance, column-level lineage
backend/05_testing/qa_engineering/ (3 files) QA methodology and ISTQB test-design techniques; automation framework architecture, API testing, load/stress/soak, cross-browser
ai_ml/18_speech_and_realtime/ (3 files) STT/TTS, and realtime voice agents — latency budget, turn detection, barge-in, WebRTC
backend/21_cloud_gcp/02_gke_in_practice.md GKE Autopilot vs Standard, Workload Identity, Gateway API, the three autoscalers, cross-cloud identity federation
methodologies/08_ai_assisted_development.md AI-DLC (Inception/Construction/Operations, “bolts”), and the Kiro/Antigravity/Codex/Claude Code landscape

Web-verified before writing and recorded in STACK_BASELINE.md: Backtrader is effectively unmaintained; FHIR R6 is still in ballot (R4 is what EHRs implement); the Fivetran/dbt Labs merger completed 2026-06-01 and dbt Core v2.0 open-sourced the Fusion engine; Airflow 3.3.0; Iceberg v3 GA; CSA supersedes the binder-heavy CSV interpretation.

Honest gaps left documented rather than faked: Go, Scala, Node.js depth, options pricing, DICOM.

Phase 10 — style unification and depth pass (2026-08-10)

Not in the original plan; added because the phase-9 verification showed the repo was correct but not yet uniform.

  • Emoji removed repo-wide — 147 files, including orphaned variation selectors that broke TOC anchors.
  • **Answer:** Q&A blocks removed — all remaining files converted to prose.
  • ## Interview angle added to 190 files across backend, ai_ml, devops, aws, behavioral, 24_dsa, frontend and system_design, in seven batches. Every content file now closes with one.
  • system_design/ rebuilt02_resilience 10 thin files -> 4 real notes; 01_api_integrations 13 -> 4; 03_async_patterns 4 -> 1; 04_secrets_config 2 -> 1; 05_observability consolidated; folder index written.
  • MINT techchecktechcheck/mint_tech_check/ created from the interview debrief; 29 of 33 stack items mapped to notes, 3 gaps filled (dependency-injector rewritten from a 33-line generic note, LlamaIndex, model-provider abstraction), Go and Scala documented as honest gaps.
  • React modernisedreact.md rewritten for the Vite / Next.js era (it recommended the archived create-react-app); react_2.md deleted as a duplicate teaching manual memoization that React Compiler 1.0 makes wrong.
  • frontend/06_vue/ expanded 15 -> 25 files to match 05_react in depth: Vue Router, composables and VueUse, TypeScript, template syntax and directives, compiler internals and patch flags, versions and Vapor Mode, forms and validation, component libraries, data fetching, and a Vue-vs-React comparison. 01_vue_overview.md rewritten from a 700-line project-specific guide into a real entry point. Vue rows added to STACK_BASELINE.md (3.5.41 stable, 3.6 still RC).