Skip to main content
FIELD REPORT · AI

MLOps and AIOps for Engineering Organizations

A practical MLOps and LLMOps stack for 2026 — what to adopt, what to skip, and why most companies do not need full MLOps anymore.

PUBLISHED
April 14, 2026
READ TIME
10 MIN
AUTHOR
ONE FREQUENCY

Most engineering orgs talking about "MLOps" in 2026 do not actually need MLOps. They need LLMOps. The two stacks share some DNA but solve different problems, and conflating them leads to overbuilding.

This piece walks the full MLOps lifecycle, then the LLMOps stack, then the honest question of which one you actually need. If your company trains models, you need the first. If your company wraps APIs from OpenAI, Anthropic, or Google, you mostly need the second.

The MLOps lifecycle stack

If you are training, fine-tuning, or serving custom models, the lifecycle has six stages. Each has mature tooling now.

Stage 1: Data versioning

Code without version control is malpractice. Data without versioning is the same. The options:

  • DVC — Git-adjacent, file pointers, works with any storage backend
  • LakeFS — Branch-and-merge semantics on object storage, more powerful, more ops
  • Pachyderm — Pipeline-native, opinionated, less popular now
  • Delta Lake / Iceberg — Format-level versioning for table data, increasingly the default in data lakes

Pick DVC if you are file-oriented and small. Pick LakeFS or table formats if you are at warehouse scale.

Stage 2: Experiment tracking

The "I tried 40 hyperparameter combos last Tuesday and I have no idea which one won" problem:

  • Weights & Biases — The most polished UX, hosted or self-host, the safe enterprise default
  • MLflow — OSS, self-host friendly, less polish, broader integration
  • Comet — Strong for vision and NLP workflows, good free tier
  • Neptune — Lightweight, developer-friendly, less common in larger orgs

For most teams, MLflow self-hosted is the right starting point. W&B if budget is not the constraint.

Stage 3: Model registry

A registry is not optional. It is the bridge from "training experiment" to "production artifact." MLflow's built-in registry, W&B Artifacts, and SageMaker Model Registry all work. The decision is usually dictated by which platform you already chose in stage 2 — keep them aligned.

Stage 4: Feature stores

A feature store is overkill for most teams. You need one if:

  • You have multiple models consuming overlapping features
  • You have online and offline serving with strict consistency requirements
  • Your team is large enough that feature reuse is a real problem

If yes:

  • Tecton — Commercial, opinionated, mature
  • Feast — OSS, lighter, requires more glue

If your team has three models and one engineer per model, skip the feature store. Use a well-designed feature library in Python instead.

Stage 5: Model serving

The serving layer has the most options and the most divergence by use case:

| Need | Pick | |------|------| | Custom model, you own the infra | BentoML or KServe on Kubernetes | | Custom model, you want serverless | Modal, Replicate, or Banana | | Standard model, AWS shop | SageMaker Endpoints | | Standard model, GCP shop | Vertex AI Prediction | | Standard model, Azure shop | Azure ML Online Endpoints | | LLM, you want to host | vLLM, TGI, or LMDeploy on GPU instances |

The serverless options (Modal, Replicate) have closed most of the cost gap with self-hosted in the last 18 months. Unless you have constant high-volume traffic, serverless is usually the right starting point.

Stage 6: Monitoring and drift detection

You shipped a model. Now it degrades silently. You need:

  • Arize — Strong on tabular and LLM observability, hosted
  • WhyLabs — Privacy-first (statistical profiles, not raw data), good for regulated industries
  • Fiddler — Enterprise focus, explainability features
  • Evidently — OSS, good for getting started

Monitor at minimum: input distribution shift, output distribution shift, prediction confidence trends, and downstream metric correlation.

CI/CD for models

The CI/CD layer wraps it all:

  • Argo Workflows + Argo CD for Kubernetes-native pipelines
  • Kubeflow Pipelines for full ML platform on K8s
  • Vertex Pipelines on GCP
  • SageMaker Pipelines on AWS
  • GitHub Actions + your registry of choice for simpler cases

The pattern that works: every model retrain is a PR. Every deploy is a Git tag. The same release discipline you would expect from your application code. Tie this into your broader CI/CD pipeline best practices so model deploys are not a separate, fragile workflow.

The LLMOps stack

If you are not training models — if your "AI" is OpenAI, Anthropic, or Google APIs behind a thin wrapper — you need a different stack. This is where most engineering orgs actually are in 2026.

Gateway and proxy layer

Do not call provider APIs directly from your application code. Put a gateway in front. Options:

  • LiteLLM — OSS proxy, normalizes 100+ providers behind one API, self-host
  • Portkey — Hosted gateway, retries, fallbacks, observability
  • Helicone — OSS or hosted, focus on observability and caching
  • OpenRouter — Hosted aggregator, useful for model experimentation

Benefits: rate limiting, retries, fallbacks, cost tracking, key rotation without app deploys, easy provider swapping.

Eval harness

Without evals, you cannot tell if your prompts got better or worse. The options:

  • Braintrust — Hosted, opinionated, strong dataset and CI integration
  • Promptfoo — OSS, YAML-driven, easy to put in CI
  • OpenAI Evals — OSS, OpenAI-aligned, less general
  • LangSmith — Tightly coupled with LangChain, otherwise capable
  • Inspect AI (UK AISI) — OSS, strong for agentic and safety evals

Pick Promptfoo if you want CI-integration on day one. Pick Braintrust if you want a hosted dashboard and your team is large enough to justify the licensing.

Prompt management

Prompts in code work until they do not. The pain hits around 30 prompts:

  • Latitude — OSS prompt management with versioning and evals
  • PromptHub — Hosted prompt registry
  • PromptLayer — Hosted, observability-first
  • LangSmith Hub — Tied to LangChain

The minimum viable answer: prompts in a separate prompts/ directory, versioned in Git, loaded at startup, hash-tagged in your logs.

Guardrails

Input and output validation specifically for LLMs:

  • NeMo Guardrails (NVIDIA) — Programmable rails, dialog flow
  • Guardrails AI — OSS, output validation, structured generation
  • Lakera Guard — Hosted, prompt injection focus
  • Protect AI Layer — Hosted, broader threat coverage

At minimum, validate structured outputs against a schema (use Pydantic or Zod) and run a prompt injection detector on user input that flows into system prompts.

Observability for LLMs

This is where LLMOps differs most from traditional APM:

  • Helicone, Langfuse, LangSmith, Arize Phoenix — Trace-level logging, token usage, cost per request
  • OpenTelemetry GenAI conventions — The emerging standard, use it

Trace every LLM call with: prompt hash, model, input tokens, output tokens, latency, user ID, feature flag state, and outcome (success / refusal / error).

The honest question: do you need MLOps?

A useful checklist:

  • [ ] We train or fine-tune our own models for production use
  • [ ] We have more than two ML engineers
  • [ ] We have data scientists shipping models to production
  • [ ] We have regulated requirements for model audit trails
  • [ ] We need feature reuse across multiple production models
  • [ ] We have a measurable cost benefit from owning model infrastructure vs API calls

If you checked zero or one boxes, you are an LLMOps shop. Skip MLflow, skip the feature store, skip the model registry. Invest in the gateway, eval harness, and observability instead.

If you checked three or more, you need the full MLOps stack. Pick one tool per layer and resist the urge to add a second until the first is fully adopted.

A reference stack for each profile

Profile A: LLM API wrapper (most companies)

gateway: LiteLLM (self-hosted)
evals: Promptfoo in CI
prompts: Git-versioned, loaded at startup
guardrails: Guardrails AI for output validation
observability: Langfuse or Helicone

Profile B: Custom models, small team

data_versioning: DVC
experiment_tracking: MLflow (self-hosted)
registry: MLflow Model Registry
serving: Modal or Replicate
monitoring: Evidently
ci_cd: GitHub Actions

Profile C: Custom models, platform team

data_versioning: LakeFS or Iceberg
experiment_tracking: Weights & Biases
registry: W&B Artifacts
feature_store: Feast or Tecton
serving: BentoML on KServe
monitoring: Arize or Fiddler
ci_cd: Kubeflow or Argo

Cost discipline for LLMOps

Cost gets out of control faster in LLMOps than in MLOps. The bills are pay-per-call, the calls are unbounded by default, and a single misbehaving feature can 10x your monthly spend.

The controls:

  • Hard budget caps per environment: Most provider dashboards support this. Set them.
  • Per-feature cost attribution: Tag every LLM call with a feature ID. Aggregate weekly.
  • Caching at the gateway: Helicone, Portkey, and LiteLLM support semantic and exact-match caching. For repetitive prompts, the cost reduction is 30 to 70 percent.
  • Model fallbacks: Use the cheaper model first, escalate only on failure. LiteLLM and Portkey both support this natively.
  • Prompt compression: Trim system prompts ruthlessly. Every token costs. A 4000-token system prompt at 1M calls per month is real money.

A weekly cost review meeting catches drift fast. Without one, surprises stack up and the finance conversation gets ugly.

Evals: the cultural shift

The technical setup of an eval harness is the easy part. The cultural shift is what matters:

  • Every prompt change must include an eval run in the PR
  • Eval results are visible to the team, not buried
  • Failing evals block merge by default
  • New use cases require new eval datasets before launch
  • Production samples flow back into the eval dataset on a schedule

This is the discipline that separates teams that ship reliable LLM features from teams that ship LLM features that mysteriously degrade. The tooling enables the discipline. The discipline is the actual transformation.

Production-readiness checklist for an LLM feature

Before any LLM feature ships to production, walk this list:

  • [ ] All calls go through a gateway, not direct provider SDK
  • [ ] Prompts are versioned in Git with hash-tagged logging
  • [ ] An eval set exists with at least 50 examples covering happy path and edge cases
  • [ ] Output is validated against a schema (Pydantic, Zod, or equivalent)
  • [ ] Prompt injection detection is in place for user-controlled inputs
  • [ ] Cost per call is measured and a budget cap exists
  • [ ] Trace logging captures prompt, response, latency, tokens, user ID, feature flag state
  • [ ] A fallback model and retry policy is configured
  • [ ] An A/B test or feature flag gates rollout
  • [ ] An owner is named for the prompt and its evals

A feature that fails any of these gates is not production-ready. It is a science experiment that happens to be in production, which is the worst of both worlds.

Common anti-patterns

  • Adopting Kubeflow when your team has one ML engineer
  • Building a feature store before having two models in production
  • Calling OpenAI directly from application code with no gateway
  • Treating prompt changes as deploys requiring code review only, no evals
  • Monitoring LLM cost only in the provider dashboard, not in your own observability

Next steps

Be honest about which profile fits your team today, not the team you imagine in two years. Most of the wasted MLOps spend in 2025 came from companies adopting profile C tooling for profile A workloads. If you want a second opinion on which stack fits your team, get in touch and we can walk the lifecycle against your current setup.

View All Insights
NEXT STEP

Ready to ship the next outcome?

One Frequency Consulting brings 25+ years of technology leadership and military discipline to every engagement. First call is operator-grade scoping — sixty minutes, no charge.