Duque Ortega Mutis · Mexico City · open to ML / MLOps roles
Building ML systems
that survive production.
Three services deployed on GKE and EKS. Three production incidents measured, root-caused and fixed. Two open-source templates: one that packaged the lessons for a single service, one for the platform above that boundary. Built on fourteen years of running operations before the first model.
Portfolio
one monorepo · three production services
Fourteen years of operations flow into the build: churn, financial NLP and demand forecasting — tested, deployed and operated on GKE and EKS.
The work
Projects, problems, solutions
Each service, the production problem it hit, and the fix — measured, root-caused and documented. The cases drift on their own — hover to hold, drag to browse.
BankChurn Predictor
81% of requests failing. The model was fine.
A load test exposed an 81% error rate on the BankChurn API. Root cause:
uvicorn --workers inside Kubernetes — multiple workers competing
for one shared CPU budget produce thrashing, not parallelism. Redesigned the
inference path with asyncio plus a ThreadPoolExecutor (GIL analysis documented),
errors dropped to zero and the CPU request was halved.
NLPInsight Analyzer
The heavier model we chose not to ship
Financial sentiment classification where the production question mattered more than the leaderboard: a transformer would score higher and cost more to operate, explain and debug. NLPInsight ships a lightweight, explainable path — and documents the rejected alternative as an engineering decision, not an omission.
ChicagoTaxi Pipeline
A score too good to be true — until it was
Demand forecasting over 6.3M Chicago taxi trips. The first model looked perfect because a feature was leaking the future into training. Removed the leak, rebuilt validation as strictly temporal, and the R² of 0.96 that survived honest re-evaluation is the one published.
Template · classical ML
every lesson, packaged as defaults
The ML Service Template turns the portfolio's production lessons into a reusable open-source system for classical ML — scikit-learn, XGBoost, LightGBM, single team, 1–5 models. Its scope limit is an ADR, not an omission — small enough to read in an afternoon, and that is what makes it recommendable.
- 38 anti-patternsD-01..D-38, each with its corrective action
- 52 ADRsdecisions with rejected alternatives
- SLSA L2 supply chainsigned images + SBOM attestation
- AUTO · CONSULT · STOPagent behavior protocol
- 6 env×cloud overlaysdev / staging / prod on GCP + AWS
- Governed AI-assisted devreviewable, bounded agentic coding
Platform · ML · DL · LLM · agents
chapter three · because the template said no
ml-platform is the second
template, and the enterprise one. A single-service scaffold cannot hold
point-in-time feature retrieval, lakehouse tables, orchestration with lineage,
GitOps reconciliation or LLM evaluation gates — so that work got its own
repository instead of widening the first. It consumes the template
through copier; it never reimplements it.
- 4 project kindstabular · deep learning · LLM/RAG · agents
- 4 drift detectorsone shared contract, per kind (ADR-007)
- LLMOps planeprompt registry, semantic cache, guardrails, eval gates
- Tooling triagecore / demonstrated / studied / rejected, with reasons
- 48 of 55 componentsstatus derived from the filesystem, not by hand
- L4 printed at zerono cloud rollout claimed, because none has happened
The agent core
chapter four · the philosophy generalizes
agent-local takes the template's
governance — eval-gated autonomy, policy-as-data, no fine-tuning until a
written gate fires — and proves it generalizes to a domain it was never
written for: local, multi-tier LLM agents. It is also the LLM
plane inside ml-platform, vendored in with full git history, and
stays standalone as the business-agnostic upstream. Active build.
- Reusable corea new domain is a thin use-case, never a fork
- Grammar-constrained routingtier-0 router, 20/20 gate
- Policy-as-dataversioned YAML + decision_id
- Local-firstllama.cpp tiers; cloud only as budgeted overflow
- Also inside ml-platformvendored with history; still standalone and agnostic
- Live statustracked by checklist on the Projects page
The toolbox
Capability map
ml engineering
- Python
- scikit-learn
- XGBoost / LightGBM
- SHAP explainability
- Pandera validation
mlops · serving
- FastAPI
- Docker · Kubernetes
- MLflow
- GitHub Actions CI/CD
- Prometheus · Grafana
cloud · infra
- GCP — GKE · Workload Identity
- AWS — EKS · IRSA
- Terraform
- Kustomize overlays
- Cosign · SBOM
data
- PySpark
- Pandas
- Temporal validation
- Drift — PSI · Evidently
- Leakage gates
governed ai-assisted development Claude Code · Cursor · Codex · Devin — behavior rules, skills, audit trail, eval gates. Engineered, not hidden.
Next system