What this guide is, and who it is for
This is a six-month plan for one specific person: a working data engineer or analytics engineer who writes production pipelines, owns models in a warehouse, and has been quietly wondering whether the AI wave is passing them by. If you maintain Airflow or Dagster DAGs, write dbt models with tests, argue about late-arriving facts, chase down a stale partition at eleven at night or explain a warehouse bill to a finance business partner, this is written for you.
The argument is simple and it runs against the usual career-change advice. Most guides tell career switchers that they are starting from nearly zero and must build a foundation. You are not, and you must not. The unglamorous discipline you already have — making a scheduled system run reliably, cheaply and correctly on data that keeps changing underneath you — is precisely the discipline that separates an AI prototype from an AI product. Most demos fail not because the model was wrong but because the index went stale, the retry logic double-charged, the schema drifted silently or nobody could say what the thing cost per request. Those are your problems. You have solved versions of all of them.
What you are missing is a genuinely small and specific layer: the language model API surface, prompt and context engineering, retrieval architecture, and evaluation. As of August 2026, the commonly cited timeline for an unstructured transition is six to eighteen months of focused work. Six months is the fast end of that range, and it is available to you precisely because you are not building the foundation — you are adding a storey to one that already exists. The plan below assumes eight to ten committed hours a week alongside a full-time job, and that every one of those hours goes into a shipped, measured artefact rather than a course completion certificate.
One more framing point before the detail. The structural shortage in this market is not at the entry level. It sits at mid-level, where deep technical skill has to combine with delivery ownership, and that is exactly the profile of a data engineer with four to eight years behind them. As of August 2026 the demand-to-supply ratio for AI engineers runs at roughly 3.2 to 1, time-to-hire averages eight to twelve weeks, and around 70 per cent of accepted offers face a counter-offer from the candidate's current employer. That is not a market that wants more juniors. It wants people who can be trusted with production.
What already transfers from the data platform
Be honest about the audit in both directions. Overclaim, and you walk into an interview asserting that a dbt project makes you an AI engineer. Underclaim, and you spend three months on introductory Python you did not need while the thing that would have got you hired sits unbuilt. Here is the mapping, item by item.
| What you do now | What it becomes in an AI system | Why it matters more than you think |
|---|---|---|
| Airflow or Dagster DAGs — task graphs, dependencies, sensors, backfills | Agent orchestration — a graph of tool calls with a non-deterministic planner choosing the path | Agent frameworks are DAG engines with a model in the scheduler seat. You already reason in graphs, retries and partial failure. |
| dbt tests — not_null, unique, accepted_values, relationships, custom assertions | Eval suites — golden sets with assertions that run on every change and gate the merge | The mental move from “does this pass tests in CI” to “does this pass evals in CI” is a vocabulary change, not a conceptual one. |
| Data contracts between producer and consumer teams | Tool schemas — the typed interface an agent is allowed to call, with validation and refusal on malformed input | Badly specified tools are a leading cause of agent failure. You have spent years writing interface specifications that survive contact with other teams. |
| Warehouse cost attribution — cost per query, per model, per business unit | Token cost attribution — cost per request, per feature, per tenant, split across input, output and cache | Very few AI teams can answer “what does this feature cost per thousand requests”. You can build that dashboard in a fortnight. |
| Idempotency, exactly-once semantics, retries with backoff, dead-letter queues | Agent reliability — safe re-execution, deduplicated side effects, bounded retry, human escalation queue | An agent that retries a payment tool without idempotency keys is a data engineering bug in new clothing. Most AI-first engineers have never had to think about it. |
| Change data capture and incremental loads | Incremental index refresh — re-embedding only what changed, with tombstones for deletions | Full index rebuilds are the naive default and they are expensive and slow. Incremental refresh with correct deletion handling is a genuine differentiator. |
| Data quality monitoring, freshness SLAs, lineage | Retrieval quality monitoring, index freshness SLOs, provenance from answer back to source document | Citation and provenance requirements in regulated work are lineage problems. You have built lineage before. |
| Schema evolution and migrations without downtime | Embedding model migrations and prompt versioning without breaking live traffic | Swapping an embedding model invalidates every vector you have stored. That is a migration, and you know how to run one. |
| Partitioning, clustering and query cost tuning | Chunking strategy, index parameters, and the latency and cost profile of retrieval | Chunking is partitioning for text. The trade-off shape — granularity against recall against cost — is one you have made a hundred times. |
Read down the middle column and notice what it is not. None of it is model training. None of it is research. The applied AI engineering job in 2026 is a systems job, conducted in Python or TypeScript, where the artefacts are pull requests, evaluation runs and dashboards rather than notebooks. Notebooks are rare in this work. If your mental image of the role is a Jupyter notebook and a paper, you have the wrong picture and it is holding you back.
Rewrite your existing work in the vocabulary of the destination role before you build anything new. “Owned a 400-model dbt project with 1,200 tests” becomes “owned the regression suite gating every change to a production data product”. That is the same sentence a hiring manager reads when you describe an eval suite. The translation is honest and it starts working immediately, which is more than can be said for a certificate.
The four things you are actually missing
Four gaps, and only four. Explained here in terms you already hold rather than in the language of the field, which is deliberately unhelpful to newcomers.
1. The language model API surface
This is the smallest gap and the one people wrongly spend the most time on. A model provider's API is a rate-limited, priced, occasionally flaky HTTP endpoint that returns unstructured text unless you constrain it. You have integrated dozens of those. What is genuinely new is the shape of the failure modes: partial output, refusals, silent truncation at the context limit, non-determinism across identical inputs, and pricing that varies by input, output and cached tokens. Structured output with a strict schema, streaming, tool calling and cache-aware prompt layout are the four features that matter in production. Budget two weeks, not two months.
2. Prompt and context engineering
Think of the context window as a query plan you assemble by hand for every request. You are deciding what to load, in what order, at what cost, under a hard size budget — which is the same optimisation you make when you decide whether to broadcast a dimension table or shuffle a fact table. The skills that carry are budgeting, ordering for cache reuse, and ruthless pruning of anything that does not change the answer. The skill that does not carry is the belief that a longer prompt is a better prompt. It generally is not, and it always costs more.
3. Retrieval architecture
Retrieval-augmented generation is the most in-demand AI engineering skill in 2026, and structurally it is a derived dataset with a serving layer, which is your daily work described differently. The parts that are genuinely new are embeddings as a representation, approximate nearest-neighbour indexes as a storage engine, and chunking as the partitioning decision that governs everything downstream. Two facts save you months. First, hybrid search — lexical BM25 combined with vector similarity — is the single biggest quality improvement over a naive vector-only pipeline, and it is often a day of work. Second, a cross-encoder reranker over the top candidates is the highest-return addition after basic retrieval works. Chunk-size and embedding trade-offs are laid out properly in the production chunking and embedding guide; do not rediscover them by trial and error.
4. Evaluation
Evaluation is the single biggest skill gap in the current AI engineering market, and for a data engineer it is the most winnable, because you have been writing assertions against non-deterministic upstream data for years. An eval suite is a test suite whose assertions are statistical rather than exact. You already accept that a freshness check is a threshold rather than a boolean. The move from “this column is never null” to “faithfulness on this golden set does not regress below 0.86” is a smaller step for you than for almost anyone else entering this field. The core metrics to know by name are faithfulness, context precision, context recall, groundedness, answer relevance and hallucination rate. Designing evals that a system cannot quietly game is covered in the guide to evals agents cannot game, and it is worth reading in month three rather than month six.
The most common evaluation mistake in production AI systems is measuring only generation and never measuring retrieval. When your end-to-end score drops you then have no idea whether the model got worse or the index stopped returning the right documents — which are completely different repairs. Score the two layers separately from the very first eval run. The harness later in this guide does exactly that, and it is the artefact that most reliably impresses an interviewer.
The six-month plan, month by month
This is the centrepiece. Each month produces one shippable thing and one sentence you can defend under questioning. The final column matters as much as the third: an artefact you cannot describe in an interview is an artefact that does not exist. Assume eight to ten hours a week; nothing here requires you to leave your job, and leaving your job before month four is usually a mistake.
| Month | Focus | What you build | What you can claim in an interview |
|---|---|---|---|
| 1 | API surface, structured output, cost and latency instrumentation | A command-line tool that takes a batch of records from a table you already own, calls a model with a strict output schema, validates every response, retries on failure with backoff, and writes cost and latency per record to a table | “I instrumented cost and p95 latency per record from day one, so I have never shipped a model call I could not price.” |
| 2 | Retrieval, done properly rather than naively | A retrieval service over a corpus you understand — internal documentation, support tickets, regulatory text — with chunking, a vector index, BM25 lexical search, and hybrid fusion of the two. No generation yet | “I built retrieval before generation, and measured recall at k on a labelled query set before a model ever saw the context.” |
| 3 | Evaluation, split by layer | A golden set of at least 50 examples with expected source documents and expected answer content, plus a harness that reports retrieval and generation scores separately and classifies each failure by cause | “My harness tells me whether a regression is a retrieval miss or a generation miss, which is the distinction most teams cannot make.” |
| 4 | Quality lift, measured against a baseline | A cross-encoder reranker over the top candidates, a query-rewriting step, and a documented before-and-after on the same golden set, including the latency and cost the improvement cost you | “Reranking lifted context precision on my golden set by a measured delta, and I can tell you what it added to p95 latency and to cost per query.” |
| 5 | Agents, tool schemas and failure design | A small agent with three or four real tools — one of them a retrieval call, one of them a write with an idempotency key — a bounded retry policy, a kill switch, and a measured task success rate over a fixed scenario set | “I designed the tool schemas as data contracts and made every write idempotent, so a retry cannot double-apply a side effect.” |
| 6 | Production packaging, incremental refresh and the public record | Incremental index refresh with deletion tombstones on a schedule, evals running in CI on every pull request, a cost and latency dashboard, a deployed demo, and a written narrative of the whole build | “My index refreshes incrementally with a freshness SLO, and evals gate the merge. Here is the dashboard and here is the live demo.” |
Two structural notes on that table. Retrieval comes before evaluation because you need something to evaluate, but evaluation arrives in month three rather than month five so that months four to six all have a measuring instrument pointed at them. And agents arrive late deliberately: an agent without evaluation is a demo, and the market is saturated with demos. If you are weighing agents against evaluation against infrastructure as a longer-term specialisation, the specialisation guide is worth reading around month four, while the choice is still cheap to change.
The toolchain you will meet along the way is fairly settled as of August 2026: LangChain or LangGraph for orchestration, Hugging Face Transformers for open models, Pinecone or Qdrant for vector search, Ragas or DeepEval for evaluation, and vLLM when inference moves in-house. Learn one from each row and treat the rest as substitutable. Nobody is hired for a tool list; the tools are the least durable thing in this guide.
A portfolio nobody can find is not proof of work.
You can ship every artefact in the plan above and still be invisible, because the repository is one of two hundred million and your CV still says data engineer at the top. A Verified Builder profile puts the shipped systems first, verified, in a directory that hiring teams across India and the UK browse deliberately. It takes two minutes and no CV — and early profiles carry the Founding Builder badge, which only exists while the directory is young.
Claim your Founding Builder profile →The three portfolio artefacts that actually get read
Three deep projects beat a dozen shallow ones — the working range that hiring managers describe is three to five, and for a data engineer three is enough because each one is substantial. What they scan for is production signal: error handling, evaluation, deployment and structured thinking. What they respond to is outcomes and metrics, not stack lists. Every artefact below therefore has a mandatory number attached, and a project without its number is not finished.
Artefact one: the evaluated retrieval service
A retrieval service over a corpus with a real shape — Indian tax circulars, NHS or NICE clinical guidance, your organisation's runbooks in synthesised form, a public regulatory archive. Hybrid search, a reranker, incremental refresh, provenance from every answer back to a specific source passage, and an honest README describing what it cannot do. The metric it must report: recall at k and context precision on a labelled query set, before and after the reranker, with the latency and cost each stage adds. A retrieval project without a recall number is a tutorial with a different logo on it.
Artefact two: the eval harness
This is the one that converts, because it lands squarely on the market's biggest gap. A harness with a versioned golden set of at least 50 examples, scoring retrieval and generation as separate layers, classifying every failure by attributable cause, and running in continuous integration so that a pull request which regresses quality cannot merge. Publish the golden set and the failure analysis, not just the score. The metric it must report: the pass rate and the split between retrieval-attributable and generation-attributable failures, plus the agreement figure if you use a model as a judge. Framing this so a reviewer sees the point within ten seconds is covered in the proof-of-work portfolio guide.
Artefact three: the agent with a real failure surface
Three or four tools with typed schemas, at least one of which performs a write and therefore needs an idempotency key, a bounded retry policy, a circuit breaker, a kill switch and an escalation path when the agent cannot proceed. Run it over a fixed set of scenarios including deliberately hostile ones — malformed input, a tool that times out, an instruction that should be refused. The metric it must report: task success rate over the scenario set, the rate of unsafe or unintended side effects, and cost per completed task. Almost every agent portfolio project in circulation reports none of these, which is exactly why yours will be read.
Host them the way the market expects: code on GitHub, a working demo on Hugging Face Spaces so a reviewer can try it without cloning anything, and a written narrative on a blog or a public profile explaining the decisions. Those three together are the standard combination, and each does a different job. The repository proves you can build, the demo proves it runs, the narrative proves you understood why.
Write the failure analysis before you write the README. List the five ways your system produces a wrong answer, what each one costs a user, and what you did about it. It takes an afternoon, it is the section interviewers read most carefully, and it is the single clearest signal that you have operated something rather than merely built it.
An eval harness that scores retrieval and generation separately
Here is the shape of artefact two, written as plain Python with clearly-named placeholder functions rather than framework calls, so that you can drop your own retriever and generator in and run it in an afternoon. Ragas and DeepEval will do more than this eventually, but writing it yourself once is what teaches you what their numbers actually mean.
The golden set is a JSONL file, one case per line, versioned in the repository next to the code:
{"id": "gst-012", "question": "Is input tax credit available on an out-of-state hotel invoice?", "relevant_docs": ["circ-place-of-supply-2019"], "must_contain": ["place of supply"], "must_not_contain": ["always eligible"], "why": "Analysts routinely miss the place-of-supply rule here."}
{"id": "nice-004", "question": "Anticoagulation before elective surgery for a patient on a DOAC", "relevant_docs": ["guideline-periop-anticoag"], "must_contain": ["withhold"], "must_not_contain": ["continue as normal"], "why": "A wrong answer here is clinically harmful, not merely unhelpful."}
And the harness itself. Note the attribution step at the end — that is the part that most implementations leave out, and it is the part that turns a score into an action for Monday morning.
"""Two-layer eval harness: score retrieval and generation separately,
then attribute every failure to the layer that caused it.
Run: python eval_harness.py golden.jsonl
"""
from __future__ import annotations
import json
import sys
from dataclasses import dataclass, asdict
from statistics import mean
from typing import Callable, Sequence
K = 5
THRESHOLDS = {"recall_at_k": 0.85, "context_precision": 0.60, "groundedness": 0.90}
@dataclass(frozen=True)
class Case:
id: str
question: str
relevant_docs: tuple
must_contain: tuple = ()
must_not_contain: tuple = ()
why: str = ""
@dataclass(frozen=True)
class Scored:
id: str
recall_at_k: float
context_precision: float
grounded: bool
content_ok: bool
unsafe: bool
@property
def retrieval_ok(self) -> bool:
return self.recall_at_k >= 1.0
@property
def generation_ok(self) -> bool:
return self.grounded and self.content_ok and not self.unsafe
@property
def blame(self) -> str:
if self.retrieval_ok and self.generation_ok:
return "pass"
if not self.retrieval_ok and not self.generation_ok:
return "retrieval_miss" # generation never had a chance
if not self.retrieval_ok:
return "retrieval_miss_recovered"
return "generation_miss" # context was there and was not used
def load_golden(path: str) -> list:
cases = []
with open(path, encoding="utf-8") as fh:
for line in fh:
if not line.strip():
continue
raw = json.loads(line)
cases.append(Case(
id=raw["id"],
question=raw["question"],
relevant_docs=tuple(raw.get("relevant_docs", ())),
must_contain=tuple(raw.get("must_contain", ())),
must_not_contain=tuple(raw.get("must_not_contain", ())),
why=raw.get("why", ""),
))
return cases
def score_case(case: Case, doc_ids: Sequence, answer: str,
is_grounded: Callable) -> Scored:
gold = set(case.relevant_docs)
top = list(doc_ids[:K])
hits = gold & set(top)
text = answer.lower()
return Scored(
id=case.id,
# did retrieval put every required document in the top K?
recall_at_k=(len(hits) / len(gold)) if gold else 1.0,
# how much of the retrieved context was actually relevant?
context_precision=(len(hits) / len(top)) if top else 0.0,
# is every claim in the answer supported by the retrieved context?
grounded=is_grounded(answer, top),
content_ok=all(p.lower() in text for p in case.must_contain),
unsafe=any(p.lower() in text for p in case.must_not_contain),
)
def evaluate(cases: Sequence, retrieve: Callable,
generate: Callable, is_grounded: Callable) -> dict:
rows = []
for case in cases:
doc_ids = retrieve(case.question, K)
answer = generate(case.question, doc_ids)
rows.append(score_case(case, doc_ids, answer, is_grounded))
blame_counts: dict = {}
for row in rows:
blame_counts[row.blame] = blame_counts.get(row.blame, 0) + 1
report = {
"n": len(rows),
"retrieval": {
"recall_at_k": round(mean(r.recall_at_k for r in rows), 3),
"context_precision": round(mean(r.context_precision for r in rows), 3),
"zero_hit": [r.id for r in rows if r.recall_at_k == 0.0],
},
"generation": {
"groundedness": round(mean(1.0 if r.grounded else 0.0 for r in rows), 3),
"hallucination_rate": round(mean(0.0 if r.grounded else 1.0 for r in rows), 3),
"unsafe_rate": round(mean(1.0 if r.unsafe else 0.0 for r in rows), 3),
},
"attribution": blame_counts,
}
report["gate"] = {
"recall_at_k": report["retrieval"]["recall_at_k"] >= THRESHOLDS["recall_at_k"],
"context_precision": report["retrieval"]["context_precision"] >= THRESHOLDS["context_precision"],
"groundedness": report["generation"]["groundedness"] >= THRESHOLDS["groundedness"],
}
report["passed"] = all(report["gate"].values())
return report
# --- replace these three with your own pipeline -------------------------
def retrieve(question: str, k: int):
"""Your hybrid retriever: BM25 + vector, fused, then reranked."""
return ["circ-place-of-supply-2019", "circ-itc-general", "faq-hotels"][:k]
def generate(question: str, doc_ids: Sequence) -> str:
"""Your grounded generation call, citing only the retrieved documents."""
return "Eligibility turns on the place of supply for the hotel stay."
def is_grounded(answer: str, doc_ids: Sequence) -> bool:
"""Start with a human label, then a calibrated judge. Never assume True."""
return bool(doc_ids)
if __name__ == "__main__":
golden = load_golden(sys.argv[1])
result = evaluate(golden, retrieve, generate, is_grounded)
print(json.dumps(result, indent=2))
sys.exit(0 if result["passed"] else 1)
Three things to notice, because they are what an interviewer will ask about. The blame property is the whole point: it separates a case where retrieval never supplied the answer from a case where it did and the model ignored it. The zero_hit list is the actionable output — aggregate scores tell you how you are doing, zero-hit queries tell you what to fix. And the non-zero exit code makes this a CI gate rather than a report, which is the same instinct that made you fail a dbt build on a failed test. Wiring evals into continuous integration properly is covered in the guide to running evals in CI.
Do not let is_grounded stay as a stub that returns True whenever documents were retrieved. That is how a harness reports a groundedness of 1.0 while the system hallucinates freely. Label 100 to 150 outputs by hand against a written rubric first, then introduce a model judge and publish its agreement with your labels alongside every judged score. A judged number without an agreement figure is a measurement with no error bars.
What the market pays, and where
All figures below are as of August 2026 and all of them move. Benchmark before any conversation about numbers rather than during it — the India and UK pay benchmarking guide covers how to source comparable figures and negotiate against them rather than against a headline.
| Market | Figures as of August 2026 | What it means for a switching data engineer |
|---|---|---|
| India | Expected to host over one million AI and machine learning job roles by the end of 2026; 15–20% average year-on-year salary growth for skilled professionals; generative AI engineers command 30–60% pay premiums over adjacent engineering talent | The premium is the number that matters to you, because “adjacent engineering talent” is what you are today. The switch is a re-rating of your existing band rather than a reset to zero. |
| India — GCCs | Global capability centres hired 227,991 people in H1 2026 alone, and nearly two in three of those roles require AI, data or automation skills; by the end of 2026 roughly one in four GCC roles will be contractual | The highest-volume channel for exactly your profile, in Bengaluru, Hyderabad, Pune and Chennai. Read the contractual trend as a risk to price into an offer, not a reason to avoid the channel. |
| United Kingdom | AI engineer roles range roughly £60,000–£95,000 annually | London carries a premium; a Manchester, Edinburgh, Leeds or Bristol role often trades cash for scope and ownership. A data platform background lands nearer the top of that band than a bootcamp background does. |
| United States (reference only) | Median around $200,000 across an analysis of 216 recent postings, with the 25th percentile near $170,000 and the 75th near $235,000; Glassdoor puts the US median at $173,482 with a 90th-percentile cap of $269,611; senior AI/ML engineers at $240K–$520K base plus equity; LLM specialists at $220K–$280K with demand up 135.8% this year | These are United States figures and they do not transfer. Quoting them in an Indian or British negotiation costs you credibility. Use them only to understand which specialisations the market is bidding for. |
| Remote-global | Demand-to-supply ratio around 3.2 to 1 with roughly 49,200 open AI engineer positions in the US market; time-to-hire eight to twelve weeks; around 70% of accepted offers face a counter-offer | Long processes are normal, so run several in parallel and start early. Expect your current employer to counter, and decide in advance what would actually change your mind. |
Two structural observations. The shortage is at mid-level, where technical depth has to combine with delivery ownership — which is the band you are already in, so target it rather than accepting a junior title. And roughly 70 per cent of new technical learners are not on a traditional computer science degree path, which means the credential conversation has largely been settled in favour of demonstrated work. Nobody is going to ask you for a master's degree. They are going to ask what your hallucination rate was and how you measured it. If you are considering remote roles for overseas employers from India or the UK, the remote-global roles guide covers the contracting and tax shape of that path.
One more benchmark worth internalising, because it tells you what the job is once you have it. A competent AI engineer's first 90 days in role is expected to produce: one production agent or RAG feature shipped behind a feature flag, an eval suite with at least 50 golden examples, cost and latency dashboards, a rollback path, and a reported reduction in hallucination rate on a measured task. Look at the six-month plan again. It produces every one of those. That is not a coincidence — it is the design. The wider version of that ramp is in the first-90-days plan for AI engineers.
Pitfalls: what not to do
Five failure modes account for most of the switches that stall at month four.
Building tutorials instead of systems. A chatbot over a PDF, a Wikipedia question-answering demo, anything you have seen on a conference stage. A reviewer identifies these in seconds and correctly infers that you did not know the difference. The corpus you choose is the signal. Pick one where you understand what a wrong answer costs.
Skipping retrieval evaluation. Worth repeating because it is the most common production mistake in the field: teams evaluate generation and never evaluate retrieval, then cannot explain a regression. If your harness reports one blended number, you have built a dashboard that cannot be acted upon.
Chasing the frontier instead of the fundamentals. There is always a new orchestration framework and a new model release. Hybrid search and a reranker will improve your system more than any of them, and both are stable, well-understood techniques. Depth in retrieval and evaluation ages far better than fluency in whichever library is ascendant this quarter.
Abandoning the data platform identity. Presenting yourself as a junior AI engineer puts you in a pile of thousands of people with more model experience and no production instinct, judged on their terms. Present yourself as an AI engineer who owns the data layer. Most organisations eventually discover that their retrieval quality is a data quality problem, and at that moment they are looking for you specifically.
Building in private. Six months of excellent work in a private repository with no narrative attached converts at roughly the same rate as no work at all. Ship publicly from month one, write as you go, and keep a public profile that a hiring team can find without you sending it to them. If nobody can find the proof, it is not proof.
Your first two weeks
Long plans are easy to admire and hard to begin. Compress the start into five decisions and the rest follows on its own.
Choose the corpus this week. One body of text you genuinely understand, where you can say what a wrong answer costs someone. A Bengaluru GCC engineer might pick their own organisation's compliance runbooks in synthesised form; a data engineer at a London scale-up might pick public financial-conduct guidance. Specificity is the entire signal, and a corpus you understand is also a corpus you can label.
Write twenty golden cases before you write any retrieval code. Questions people actually ask, including three where the correct response is a refusal or an escalation. Written first, they are a specification. Written afterwards, they rationalise whatever you happened to build. This is the same instinct as writing the dbt test before the model, and you already have it.
Open the repository on day one and commit the bad early scripts. Commit history is the one form of evidence that cannot be assembled retrospectively, and a visible progression from rough to production-grade reads far better than a single polished drop.
Book the hours as immovable calendar blocks. Eight to ten a week, named. The people who complete this transition in six months are not faster learners; they are the ones whose calendar reflected the decision.
Publish the profile before the work is finished. The instinct is to wait until everything is polished. That is backwards: a profile that shows the plan and updates monthly gives a hiring team a reason to watch you, and being found in month three is worth more than being perfect in month six. A Verified Builder profile takes two minutes, needs no CV, and puts the shipped systems above the job title you are leaving — which is precisely the inversion a switcher needs.
Six months from a standing start is demanding, and for a data engineer it is entirely ordinary rather than exceptional. You are not learning to build systems. You are learning four specific things and pointing an existing craft at a new substrate. If you are coming from a non-engineering background instead, the honest timeline is longer and the plan is different — the domain expert's twelve-month switch plan is the right guide for that route. But if your day already involves a DAG, a test suite and a cost dashboard, the gap between you and an AI engineering role is smaller than the market has led you to believe, and it closes on a schedule you can put in a calendar.