← Writing

Choose Your MLOps Platform by Team Bottleneck, Not Feature Matrix

tl;dr Map your team's biggest bottleneck to a platform - DE teams point to Databricks, DS iteration to KubeFlow/SageMaker, serving to TrueFoundry/KServe. No platform covers everything; own the gaps.

Every MLOps platform evaluation I’ve seen follows the same arc. Someone builds a spreadsheet. Rows are platforms: SageMaker, Databricks, KubeFlow, TrueFoundry. Columns are features: experiment tracking, model registry, serving, lineage, cost. The team scores each cell, totals the columns, and picks a winner.

Six months later, half the team isn’t using it.

The scores were accurate. The question was off.

These platforms didn’t grow up competing for the same customer. Databricks came from data engineering. SageMaker came from cloud infrastructure teams that wanted managed everything. KubeFlow came from teams already running Kubernetes who wanted ML to fit into that world. TrueFoundry came from teams that wanted production ML without hiring a platform team to build it.

Comparing them feature-by-feature assumes they’re solving the same problem. They’re not. The more useful question is: which team function is actually the bottleneck right now?

That question almost always points somewhere specific.

If data engineering is the bottleneck

Pipelines are brittle. Datasets aren’t versioned. Nobody knows which training run used which snapshot of the data. The same feature is being computed in three different notebooks with three slightly different definitions.

Platforms built for data engineering put the data layer first and treat the ML parts as almost secondary. You get lineage, feature stores, delta tables, SQL-native workflows. Databricks is the clearest example. If your problem is data reliability and consistency, start there.

If data science iteration is the bottleneck

The DS team spends more time on environment setup than on modeling. Switching from a CPU notebook to a GPU run means filing a ticket. Experiments aren’t tracked, so nobody remembers what was tried two sprints ago.

The platform needs to get out of the way. Fast notebook spin-up, flexible kernels, experiment tracking that doesn’t require extra ceremony. Several platforms handle this well, with different tradeoffs. Databricks is genuinely strong here - compute attaches directly to the notebook, so you’re not thinking about which instance is running behind it. The notebook is the primary surface, and switching compute is a config change, not a ticket. The tradeoff is cost. SageMaker Studio is easier to bootstrap if you’re already on AWS, though environment management and compute switching add more friction. KubeFlow gives you the most control but puts the most setup burden on whoever’s running it - every step is a Kubernetes pod, which is powerful but not lightweight. If you’re already on Databricks for the data layer, it covers the DS iteration story well too, which means one fewer platform to operate.

If production serving is the bottleneck

Models get trained but don’t get deployed. Or they get deployed once and drift quietly for months before anyone notices. Latency is a black box. Scaling is manual.

This is a different problem entirely, and it needs different tooling: auto-scaling, a model gateway, real-time metrics, and native support for efficient LLM inference. TrueFoundry and KServe are built around this layer. Databricks has serving capabilities, but teams with serious serving requirements - latency-sensitive workloads, high throughput, GPU inference - tend to reach for dedicated platforms. If your models are ready but your deployment story is broken, that’s where to look.

If annotation and feedback loops are the bottleneck

Model quality is stuck because the feedback loop is broken. Users flag issues, but that signal doesn’t make it back into training data. Labeling is manual and disconnected from everything else.

This is where most platforms go quiet. None of them treat annotation as a first-class concern. SageMaker has Ground Truth, but it’s limited beyond basic tasks. Databricks, KubeFlow, and TrueFoundry all have integration paths with dedicated tools like Label Studio or Argilla - it’s doable, but it’s setup work you’re taking on yourself. If annotation is your primary bottleneck, plan for that integration work explicitly. No platform makes it turnkey.

On portability

If multi-cloud matters to your infra team, treat it as a filter before evaluation, not a column in the comparison table.

SageMaker is AWS-native, full stop. Databricks runs on all three clouds but is deeply proprietary inside; migrating away means rewriting pipelines. KubeFlow runs wherever Kubernetes does. ISV platforms like TrueFoundry sit on top of your cloud, which gives you more room to move later.

Portability doesn’t matter until it does. Decide early.

Start with the bottleneck

Before opening another comparison table: list the two or three team functions where work is actually getting stuck today. Not hypothetical future problems. Where is it slow or broken right now? Then find the platform built for those functions.

The teams that get this right don’t pick the platform with the highest score. They pick the one that solves their actual problem, know what it doesn’t cover, and plan for it. The teams that struggle pick the most complete-looking option and find out later that complete-looking isn’t the same as fit for purpose.

Pick the platform that solves your bottleneck. Own the gaps.