Tracks · forward-deployed-ai

Forward Deployed AI Engineering

Walk into a messy workflow.

Walk into a messy workflow. Find the problem worth solving. Ship a measurable improvement. Leave a system the customer can operate. This is the delivery half of applied AI, and it is the half that decides whether a working prototype ever becomes something a business relies on. You run two simulated customer engagements end to end: discovery and scope, data and integration against a hostile legacy API, bounded AI workflows with structured output and permission-aware retrieval, tool use with real authorization and audit, an evaluation harness that produces a defensible release decision, staged deployment with rollback, a live incident you have to contain and write up, and a handover pack another engineer can operate from. Every deliverable combines code, a customer decision, and evidence the solution works. The customer is fictional and the data is synthetic; the engineering and the judgement are not. This track assumes you can already ship and debug a small service - it teaches the part that comes after that, not instead of it.

8 phases · 12 projects · v1.0.0

Target roles: Forward Deployed AI Engineer, Applied AI Engineer (customer-facing), Solutions Engineer (AI), AI Delivery / Implementation Consultant

Stack: Python 3.12, FastAPI, PostgreSQL, pytest, Docker, TypeScript/React, structured logging & tracing

Want to try the material before you ask? 12 free exercises (117 minutes) run in your browser, no account needed.

PHASE 1 · 2 projects

Discovery & Scope

Find what is worth solving, for whom, and decide in advance what evidence would prove it worked - or stop the project.

  1. 01 · featured

    The Customer Discovery Pack

    Turn a sponsor's brief and five conflicting stakeholder interviews into a defensible discovery pack: a workflow diagram, a stakeholder map, an assumptions register labelling every claim MEASURED / ESTIMATED / DERIVED / ASSUMED, a scopeable problem statement, and the conflicts with the next question for each - with every number computed from the customer's own 4,000-row export rather than repeated from the brief.

    Python 3.12 · csv · mermaid · markdown

  2. 02

    Baseline & Pilot Charter

    Build a rules-based ticket-routing baseline that can say why it fired, score it properly against a human-labelled slice with per-queue precision and recall, discover that the status quo already beats it, size what a 200-label sample can actually resolve, and write a pilot charter that fixes the slice, metric, threshold, exclusions and stop conditions before any build starts.

    Python 3.12 · re · csv · markdown

PHASE 2 · 1 projects

Customer Data & Integration

Earn the right to build on the customer's data: ingest it, prove it, and survive an API that fails on purpose.

  1. 01 · featured

    The Customer Data Adapter

    Build the tested ingestion and integration layer the rest of the engagement stands on: import a deliberately hostile 4,092-row ticket export (three timestamp formats in one column, an encoding that lies, rows that destroy their neighbours), quarantine every row you cannot use with its raw text and a reason, separate exact duplicates from conflicts the file cannot resolve, make the import idempotent with a natural key and a content hash, assert a reconciliation identity on every run, and integrate with a legacy case API that reports a wrong total, rate-limits without a Retry-After, answers 200 with an empty body, rotates its key mid-import, and enforces none of its own access rules.

    Python 3.12 · SQLite · httpx · pytest · CSV ingestion · HTTP integration

PHASE 3 · 2 projects

Reliable AI Workflows

Make a bounded workflow produce structured, inspectable, permission-correct output - and know when it should refuse.

  1. 01 · featured

    Structured Triage Service

    Classify an incoming support ticket into one of five queues, extract the required fields, attach a confidence, and route uncertain cases to a person instead of guessing. Introduces the deterministic model seam the whole track is built on: a ModelClient protocol, a RecordedModel that replays committed fixtures with no API key, schema validation of every reply, a repair attempt capped at two, prompt and schema versioning in every decision record, token metering, and an honest comparison against the rules baseline on the labelled development set.

    Python 3.12 · pytest · JSON Schema · recorded model fixtures

  2. 02 · featured

    Permission-Aware Knowledge Assistant

    Answer an operational question from the customer's procedure drive with citations that resolve to a specific document and version. Builds a small local index with no external vector service, enforces access before content reaches the model rather than after, selects the policy version that was in force on the day the question is about, surfaces conflicting evidence instead of averaging it, abstains when the evidence is absent, refuses a citation whose quote is not in the retrieved text, and makes a revoked document disappear from every copy including the index and the cache.

    Python 3.12 · pytest · TF-IDF retrieval · recorded model fixtures

PHASE 4 · 1 projects

Tool Use & Controlled Actions

Let the system act on the customer's systems, with authorization at execution time and an audit trail that survives a dispute.

  1. 01 · featured

    Case-Resolution Workflow — Authorized Actions Against a Customer's System

    Deliverable D6. Build a bounded workflow that gathers case context, drafts a reply, proposes a case update, obtains an approval bound to the specific values, and executes exactly one authorized action against the mock case system. Tool contracts reject malformed arguments instead of coercing them; an ungranted write is refused even when the arguments are valid; document content is data and an injected instruction in a customer attachment produces no tool call; the single write reconciles against a non-idempotent API that answers 504 after the write has landed; and the audit line reconstructs who approved what, what was executed and which prompt produced it. Runs entirely on recorded fixtures — no model API key.

    Python 3.12 · pytest · httpx · HMAC-SHA256 · JSON schema validation · Model Context Protocol

PHASE 5 · 2 projects

Evaluation & Release Decisions

Measure it against the baseline under realistic conditions, then make a go / limited-pilot / no-go call you can defend.

  1. 01 · featured

    Evaluation Harness

    Build the harness Phase 5 runs on: versioned, content-hashed evaluation sets with a leakage check that compares text as well as record ids, a run file that separates producing a result from scoring one, metrics that report their own denominators and intervals, and error analysis that names cases instead of averaging them away.

    Python 3.12 · pytest · hashlib · Wilson score interval · recorded model fixtures

  2. 02

    Release Recommendation

    Compare two configurations and the keyword baseline against acceptance criteria declared before any result was scored, price them on cost per successful task rather than cost per call, answer a mid-engagement latency cut from the design before measuring it, exclude the results gathered during a provider outage, and write a go / limited-pilot / no-go call that names the cases where the system fails.

    Python 3.12 · pytest · predeclared acceptance criteria · incident exclusion windows · recorded evaluation runs

PHASE 6 · 2 projects

Deployment & Reliability

Operate it: staged rollout, budgets, telemetry, rollback - and contain a real incident when it arrives.

  1. 01 · featured

    Staged Deployment — Configuration, Telemetry, Budget and Rollback

    Deliverable D9. Package the triage service as a container a two-person IT team can actually operate: configuration read at start-up with a placeholder that fails rather than becoming a live setting, a correlation id that survives the whole request so an answer can be reconstructed six weeks later, a redaction that keeps the join keys and drops the customer's words and your credentials, a monthly model allowance enforced as a refusal before the call with a degraded path that still answers, a staged rollout that is a pure function of the ticket id and monotone when widened, and an operations surface where deploy, roll back and turn off are each one command. Runs on recorded fixtures against a mounted, read-only customer pack — no model API key, no cloud account.

    Python 3.12 · FastAPI · Docker · docker compose · SQLite · pytest · structured logging · contextvars

  2. 02

    Incident Exercise — Contain It, Find It, Recover, Write It Up

    Deliverable D10. You are given a symptom in the customer's voice and an evidence bundle, and not the cause. Derive the blast radius from the logs rather than from the complaint, contain the harm before you diagnose it and say what containment costs, correlate two logs that disagree to find the specific condition, separate a rollback from a fix — including the case where rolling back changes nothing because the damage is in state — and write a postmortem that names contributing conditions rather than a person. Two incidents ship in shared/incidents/: duplicate case notes from a retry storm against a non-idempotent write, and a restricted document reaching agents through a late permission filter and a warm cache. Needs nothing running: grep, python and the bundle.

    Incident response · structured log analysis · Python 3.12 · grep · postmortem writing · idempotency · cache invalidation

PHASE 7 · 1 projects

Adoption & Handover

Hand the system to the people who will own it, and prove they can run it without you.

  1. 01 · featured

    Adoption & Handover Pack — Proving Somebody Else Can Run It

    Deliverable D11. Hand the pilot to the people who will own it and prove they can run it without you: a UAT script with named participants and observable pass criteria (four of whose cases must refuse), a user guide and a runbook written as separate documents for separate readers, an ownership matrix that survives its owner leaving, support boundaries naming the frozen set, and a sponsor readout that separates measured from estimated from simulated and answers the 30% the sponsor already gave finance. An index generated from the repository refuses to publish a pack that cites an evaluation run nobody recorded, points the operator at a file that does not exist, or leaves a template placeholder in the readout. CR-9 arrives after submission — the new owner was in none of the conversations — and the reusable component leaves with the pattern but none of the customer's names, ids or tuned thresholds. Exit evidence: another learner operates the system from the pack alone, asking you nothing.

    Python 3.12 · pathlib · re · Markdown · Docker

PHASE 8 · 1 projects

Independent Customer Engagement

Do the whole thing again, alone, for a customer you have not met, with an incomplete brief and a change request half way through.

  1. 01 · featured

    The Independent Engagement

    Run a complete customer engagement alone, in a new domain, from a deliberately incomplete brief: discovery and acceptance criteria written before any code, a thin slice with an evaluation harness, a change request absorbed after the prototype, a reproducible deployment with rollback, a handover pack, and a live technical defence during which something breaks.

    Python 3.12 · pytest · PostgreSQL · Docker · git · structured logging

Next step

Request Forward Deployed AI Engineering

An advisor reviews the fit and confirms terms in writing. A request is not an acceptance and nothing is charged until you agree.