AutomateEdge · MLOps Engineer · Portfolio Projects

MLOps Engineer Portfolio Projects: 15 Shippable Ideas

These projects are ordered by platform-building dependency — each earlier one builds skills the later ones require. A strong MLOps portfolio is built of systems, not notebooks: live URLs, working CI pipelines, instrumented dashboards, and post-mortems from the things you deliberately broke. Every project here can run on a $10/month VPS with a few hours of GPU rental; most can run entirely on free-tier cloud resources.

1. Model registry from scratch using MLflow

Difficulty · Beginner 20-30 hours MLflowPostgreSQLMinIO (S3-compatible)scikit-learnDocker Compose

Stand up a self-hosted MLflow tracking server with a PostgreSQL backend and an S3-compatible artefact store (MinIO). Train three variants of a binary classifier (logistic regression, random forest, XGBoost) on the same dataset. Log all parameters, metrics, and model artefacts to your registry. Transition the winner through Staging → Production using the MLflow registry lifecycle. Build a minimal Python client that fetches the Production model version and runs inference. This project teaches the artefact management discipline that separates professional MLOps work from ad-hoc model files dropped in S3.

Evaluation rubric (what recruiters check on your GitHub)

2. CI/CD pipeline for ML: lint, test, train, evaluate, register

Difficulty · Intermediate 35-50 hours GitHub ActionsDVCMLflowruffpytestscikit-learn or PyTorch

Build a GitHub Actions pipeline that runs on every pull request and every merge to main. The pipeline must: lint with ruff, run pytest on feature engineering code, train a model on a small held-out slice of a public dataset, evaluate against a quality gate (must beat the current Production model's accuracy by ≥0.5%), and push a new Staging candidate to MLflow only if all gates pass. The training step should run on a self-hosted runner or GitHub-hosted runner with DVC pulling the data from a versioned remote. This project is the CI/CD equivalent of a 'hello world' for MLOps — nearly every interview will ask you to whiteboard a version of it.

Evaluation rubric (what recruiters check on your GitHub)

3. Model serving on Kubernetes with autoscaling and observability

Difficulty · Intermediate 40-55 hours Kubernetes (k3s or GKE/EKS)FastAPIPrometheusGrafanaHPAk6 or locust

Deploy a text classification model behind a FastAPI serving container to a Kubernetes cluster (k3s or cloud). Expose it via Ingress. Add Prometheus metrics: requests per second, inference latency p50/p95/p99, and model version label. Wire Grafana dashboards. Configure HPA to scale replicas when p95 latency exceeds 200ms. Run a k6 load test that triggers the HPA. Document the incident you had during the load test. This project proves you understand the operational reality of running ML in production, not just deploying it once.

Evaluation rubric (what recruiters check on your GitHub)

4. Drift detection system on a production-style data stream

Difficulty · Intermediate 30-40 hours Evidently AIAirflow or PrefectpandasPrometheus (for drift metrics)Slack webhook or email alert

Take a public tabular dataset and simulate production drift: create a 'day 0' training distribution and a 'day 30' inference distribution where several feature distributions have shifted. Build a batch drift-detection job using Evidently AI that computes PSI for numeric features, chi-squared for categorical features, and a data-quality report. Run the job on a schedule (Airflow or Prefect cron). Alert when PSI > 0.2 (via a Slack webhook or email). Write up a one-page post-mortem as if this were a real production drift incident, including impact, root cause, and the remediation steps you would take.

Evaluation rubric (what recruiters check on your GitHub)

5. Feature store with online-offline parity

Difficulty · Intermediate 40-55 hours FeastRedisParquet / S3 or GCSFastAPI (for serving)pytest

Build a working feature store using Feast. Define feature views for a recommendation or fraud-detection use case. Materialise features from a Parquet offline store to a Redis online store. Build a training pipeline that pulls features from the offline store and a serving pipeline that retrieves features from the online store in under 5ms. Deliberately introduce a training-serving skew bug — different bucketing on one feature — and build a validation test that catches it. This project is the single most effective way to demonstrate that you understand why feature stores exist.

Evaluation rubric (what recruiters check on your GitHub)

6. A/B testing infrastructure for two model variants

Difficulty · Intermediate 35-45 hours nginx weighted upstreams or Argo RolloutsMLflow (for model versions)PostgreSQL (for response logs)scipy (for statistical tests)Prefect or cron for daily job

Deploy two model versions (call them Model A and Model B) behind a traffic-splitting layer. Route 80% of requests to A and 20% to B. Log both models' outputs with a consistent request ID. Build a statistical significance test that runs daily on the accumulated logs and determines whether B's quality metrics are significantly better than A's. Build an automatic promotion script: if B is significantly better for 3 consecutive days, promote B to 100% traffic. This project teaches the measurement discipline that separates rigorous model deployment from opinion-based deployment.

Evaluation rubric (what recruiters check on your GitHub)

7. Canary deployment for an ML model with automatic rollback

Difficulty · Intermediate 25-35 hours Argo RolloutsKubernetesPrometheusPrometheus Adapter (for custom metrics)

Implement a canary deployment for a model update using Argo Rollouts on Kubernetes. Configure a rollout strategy: 5% → 20% → 50% → 100% canary progression, with each step gated on a Prometheus metric (p99 latency < 300ms, error rate < 0.5%). Build an automatic rollback trigger: if p99 exceeds 400ms for 2 consecutive minutes, the rollout is paused and rolled back. Seed a regression in the canary model to verify the rollback fires. Write up the incident as a post-mortem.

Evaluation rubric (what recruiters check on your GitHub)

8. Multi-model serving with vLLM and routing by capability

Difficulty · Advanced 40-55 hours vLLMFastAPI (routing layer)Prometheus (cost metrics)pydantic (schema validation)Kubernetes (two deployments, one per model)

Deploy two LLMs of different sizes (e.g. Qwen2.5-1.5B and Qwen2.5-7B) on vLLM. Build a routing layer that dispatches requests to the smaller model when request complexity is low (short prompt, simple output schema) and the larger model when complexity is high. Route 100% of structured-output requests through a quality gate that validates the JSON schema. Measure and report cost-per-request for each route. This project teaches the model routing and cost-optimisation skills that senior MLOps roles prize most.

Evaluation rubric (what recruiters check on your GitHub)

9. GPU cost-optimisation dashboard

Difficulty · Intermediate 30-40 hours DCGM ExporterPrometheusGrafanaAlertmanagerKubernetes (namespace cost attribution labels)

Build a Grafana dashboard that aggregates GPU utilisation, memory bandwidth, idle time, and cost attribution per team or model. Pull DCGM metrics from all GPU nodes. Implement a cost model: cost_per_hour × utilisation_fraction = attributed_cost. Build an alert for GPUs that are allocated but idle (utilisation < 5%) for more than 30 minutes. Document the three biggest waste sources you found in your cluster and the configuration changes that fixed them. This project is immediately valuable at any company with a GPU fleet and demonstrates measurable business impact.

Evaluation rubric (what recruiters check on your GitHub)

10. Prompt version management system

Difficulty · Intermediate 25-35 hours FastAPISQLite + Alembic (or PostgreSQL)Jinja2 (for UI)MLflow or a custom artefact store (for logging)

Build a system for managing prompt templates as versioned artefacts. Store templates in a DB with version history, author, and a description of what changed and why. Build a UI (minimal — FastAPI + Jinja2 is fine) for creating and promoting templates through a Draft → Staging → Production lifecycle. Wire prompt version as a logged field in every LLM call, so you can slice model quality metrics by prompt version. This project is directly relevant as LLM applications proliferate and 'we changed the prompt' becomes the most common cause of quality regressions.

Evaluation rubric (what recruiters check on your GitHub)

11. Model lineage tracking: code → data → model → deployment

Difficulty · Intermediate 30-40 hours MLflow (artefact + run metadata)DVCKubernetes annotationsFastAPI (lineage query API)PostgreSQL or SQLite

Build a lineage tracking layer that connects: (1) the git commit of the training code, (2) the DVC data version, (3) the MLflow run ID, (4) the model registry version, and (5) the Kubernetes Deployment that is serving the model. Implement this as a chain of metadata tags passed through the pipeline, persisted in a lineage DB, and queryable via a simple API. Given a production incident, you should be able to answer 'what training data was in scope for the model currently serving request X?' in under 30 seconds. This project demonstrates the audit-trail discipline that compliance-sensitive organisations require.

Evaluation rubric (what recruiters check on your GitHub)

12. Inference latency profiler and optimisation report

Difficulty · Intermediate 25-35 hours PyTorch ProfilerNVIDIA Nsight Systems (or nsys)bitsandbytes / TensorRTflash-attention-2vLLM or bare transformers

Profile a transformer model's inference latency end-to-end: tokenisation, model forward pass, de-tokenisation, and network overhead. Use PyTorch Profiler and NVIDIA Nsight Systems to identify the hottest kernels. Apply at least two optimisations from: dynamic batching, INT8 quantisation via bitsandbytes or TensorRT, torch.compile, attention implementation swap (flash-attention-2). Document the before/after latency and throughput for each optimisation. Publish a table of trade-offs. This project is the clearest way to demonstrate that you understand the inference side of the stack, not just the deployment side.

Evaluation rubric (what recruiters check on your GitHub)

13. End-to-end Argo Workflows ML training pipeline

Difficulty · Advanced 40-55 hours Argo WorkflowsKubernetesKubeflow Training Operator (PyTorchJob)MLflowGreat ExpectationsSlack webhook or SMTP

Build an Argo Workflows DAG that orchestrates: (1) data validation with Great Expectations, (2) feature engineering, (3) model training on a GPU job (PyTorchJob via Kubeflow Training Operator or plain Kubernetes Job), (4) evaluation and quality gating, (5) registration in MLflow, and (6) notification (Slack or email) with the evaluation metrics. Each step runs in an isolated container. The pipeline should be re-triggerable on any code or data change. This is the project that best simulates a production-grade training platform and the most common interview-loop system design question in MLOps.

Evaluation rubric (what recruiters check on your GitHub)

14. Open-source contribution to an MLOps tool

Difficulty · Intermediate 15-40 hours whichever project you contribute to

Pick an active open-source MLOps project: MLflow, Feast, Evidently AI, Ray, Argo Workflows, Kubeflow, DVC, Prefect. Find a good-first-issue, a documentation gap you hit while learning, or a bug you encountered in your projects. Submit a PR. Survive the review process. Ship it. One merged contribution to a production-grade MLOps tool demonstrates engineering maturity that no solo project can replicate.

Evaluation rubric (what recruiters check on your GitHub)

15. Capstone: end-to-end ML platform slice, documented as a system design

Difficulty · Advanced 60-90 hours all of the above; pick the right tool for each job

Build and document a coherent end-to-end slice of an ML platform: data ingestion → feature store → training pipeline → model registry → serving infrastructure → observability → drift alerting → automated rollback. Every component uses tools from this track. The deliverable is not just the working system — it is a system design document with architecture diagrams, trade-off discussions, and an honest section on what you would do differently at 10x scale. This is the project you present in Staff-level MLOps interviews.

Evaluation rubric (what recruiters check on your GitHub)

Frequently asked questions

How many of these should I actually ship?

Eight to ten. The capstone and the CI/CD pipeline project are the two most important ones — every MLOps interview will probe you on both. Lead with those when describing your portfolio.

Do I need cloud access for any of these?

No. Every project on this list can run on a local Kubernetes cluster (k3s or kind) plus a $5 VPS. The GPU-required projects (vLLM serving, inference profiler) need 2-4 hours of rental GPU time each, typically under $15 total at current Lambda / Vast / RunPod pricing.

What separates a junior-level project from a senior-level one?

Three things: (1) the system handles failure explicitly — you tested what breaks and documented it, (2) every design choice is justified with a trade-off discussion, not just 'this is what the tutorial used', (3) the project can be re-run from scratch by a stranger with just the README. Junior projects often skip all three.

Is Kubernetes overkill for a portfolio project?

Not for MLOps. Every recruiter for a mid-level MLOps role expects Kubernetes experience. Docker Compose is table stakes. A portfolio project that runs on Kubernetes — even local k3s — is a significant signal differentiator. The counterargument is only valid for very small companies where Docker Compose is genuinely the production stack.

Should these projects be on my resume?

Three featured projects on the resume, each with a one-line tagline, the tech stack, and a live URL or GitHub link. The capstone, the CI/CD pipeline, and the serving/autoscaling project are the highest-signal three. The rest belong on GitHub with a project index README.

How do I find good open-source issues to contribute to?

MLflow and Evidently AI both label issues good-first-issue and have active maintainers who respond quickly to PRs. Feast has a smaller community but very responsive. Avoid huge monorepos (Airflow, Ray) as a first contribution — the review cycle is long and the onboarding cost is high. Documentation fixes, test coverage additions, and small API ergonomics bugs are the fastest path to a merged contribution.

What if a project doesn't work after I spend 30 hours on it?

Write up the failure. 'I tried to implement X, hit problems Y and Z, investigated and found root cause W, and here is what I would do differently' is a stronger portfolio entry than a toy project that works because you followed a tutorial exactly. MLOps is fundamentally about handling failures — demonstrating you can learn from them is more signal than demonstrating everything went right.

Continue on the MLOps Engineer track