
Why Most MLOps Platforms Want a Deep Relationship with Your Codebase (and Why We Don't)
by Drazen Dodik | on May 12, 2025Picture this.
You've finally convinced your leadership team that it's time to bring some order to the chaos. Your ML team's pipeline is a Frankenstein monster stitched together from cron jobs, MLflow logs, Airflow DAGs, and someone's really determined use of bash scripts. You need structure. Visibility. Automation.
So you start looking at MLOps platforms.
And then… the demands begin.
- "Just add these decorators here."
- "You'll need to use our custom package to save artifacts."
- "Oh, we also have this wrapper that works a little differently from how you'd normally write things."
Suddenly your infrastructure solution feels like a code rewrite project disguised as a platform. Before you know it, your clean(ish) codebase starts looking like a tribute to someone else's opinionated framework. The migration plan? It feels more like an onboarding bootcamp for a new mini-language—and it's not even the one your team signed up to write models in.
When the Platform Becomes a Part of Your Codebase
Most MLOps platforms quietly nudge you into deeper entanglement:
- Add a few decorators here
- Switch to their SDKs and wrappers
- Adopt their custom logic for saving artifacts
- Maybe use their "convenient" config DSL (domain-specific language—basically a new syntax that only makes sense in their world)
These small tweaks snowball into full-blown coupling. You're not integrating a platform. You're rewriting your code to fit theirs.
And Then the Debugging Begins…
One day something breaks (I know, shocker). A pipeline fails silently. A model's accuracy plummets. And now the detective work begins:
"Is this my bug… or theirs?"
I've watched data scientists grep through logs, dig through dependency trees, and try to decode some wrapper's undocumented behavior. They tweak configs. They downgrade packages. Nothing works.
This isn't just a waste of time, it's a breakdown in confidence. The line between your logic and the platform's abstraction becomes so blurry, you're not even sure where to start looking.
And when their wrapper clashes with the package versions your team actually uses? Congratulations, you're now debugging dependency conflicts between your own code and the MLOps vendor's SDK.
This isn't hypothetical. It's what teams deal with once the honeymoon phase with a new platform ends.
What If Migration Didn't Feel Like a Rewrite?
We believe in a simple principle: Your code shouldn't have to drastically change just because your infrastructure does.
You keep your scripts. Your folder structure. Your logic. We don't ask you to wrap things, refactor for our sake, or adopt platform-specific syntax. Instead, you:
- Drop in a valohai.yaml config file (it lives outside your scripts)
- Change your output path to a local directory called /valohai/outputs/
- Run your script as-is
That's it. No decorators. No vendor magic. Just your code…fully versioned, tracked, and reproducible. Beauty.
We adapt to your approach, not the other way around.
What About Infra, Data, Compliance?
This usually comes up right after the code concerns: "Sounds good, but we have strict requirements for where our data and models are. Are we locked in Valohai?”
Short answer: no.
- Compute? Run your workloads on AWS, GCP, Azure, Oracle, on-prem, Slurm, Kubernetes or all of the above.
- Data? Stay in control. Store everything in your own buckets—Valohai just tracks it.
- Lineage and metadata? Always exportable via API. And with self-hosted options, it can all live in your own infrastructure.
If you ever want to stop using Valohai, you still own your jobs, data, artifacts, and metadata. Minimal replatforming drama.
What to Ask Your Team
If you're evaluating or already using an MLOps platform, here’s how to gut-check whether it’s quietly taking over more than it should:
Have we ever adapted our workflow or naming conventions just to make the platform happy? (Think: awkward folder names, jumping through hoops to “fit” the interface.)
Is there anything in our codebase today that only exists because the platform needed it? (Hint: If you removed the platform tomorrow, would the code still make sense?)
Have we ever hit a wall trying to use a new framework, library, or cloud service because the platform didn’t support it cleanly? (This is a sign the platform isn’t future-proofing you—it’s fencing you in.)
Can we name a feature or improvement we didn't ship because platform integration would’ve been too painful? (That’s the real cost of coupling.)
"Why Doesn't Everyone Do It This Way?"
Honestly? Because tightly integrated platforms do feel easier—if you're starting fresh and always playing by their rules.
Their wrappers and SDKs make things fast as long as your project fits their mental model. For greenfield teams building clean-slate projects, that can work great.
But real-world ML isn't that tidy.
You've got legacy scripts, custom infrastructure, and your own way of working. You don't want to refactor everything to make your tooling happy. You want clarity between what's yours and what's the platform's. And you really don't want to pause progress every time their package or philosophy collides with your stack.
That's the catch: the tighter the integration, the higher the risk. One decorator update, one dependency conflict, and suddenly you're deep in "is it us or them?" debugging hell.
Ease of use matters—but so does flexibility. Your MLOps platform shouldn't break just because your code isn't fresh out of a tutorial…which is probably outdated anyway.
Migration, But Make It Incremental
Nobody wants to kick off a "strategic platform migration" only to realize halfway through that the tooling doesn't fit—or worse, that it demands more change than it's worth.
That's why we keep the Valohai evaluation process simple, technical, and low-risk. It looks like this:
Start with a meaningful exploration: We begin with a technical demo and a hands-on discussion. Not just "here's what Valohai does," but: What's slowing your team down? Where are the workflow gaps? What does better actually look like for you?
Live dry-run with your code: Next, we fire up a screen share and take one of your real projects—code, infra, quirks and all—and run it on Valohai. No massive rewrites. Just change where you save outputs, plug in your config file, and hit go. In about two hours, you'll have your pipeline running with full versioning, lineage, and reproducibility.
Structured team trial: If that first run looks good, we plan a two-week trial with your broader team. We define what success looks like together, help with onboarding, and support your specific workflows—not just "how Valohai works," but how it fits into how you work.
Decide with real results: At the end, we look at what changed. Did you get more visibility? Faster iteration? Fewer bugs or "ghost runs"? We'll help quantify the impact—on efficiency, collaboration, and sanity—and you can decide if the fit makes sense.
We do all this to avoid what everyone hates: long-winded trials, heavy planning cycles, or high-risk "let's just migrate and hope" moments. It's just your code, your goals, and a platform that lets you test before you commit.
Keep Your Code Clean. Keep Your Future Options Open.
Platform lock-in isn't just about the code—it's about limiting your future possibilities.
When your MLOps platform forces you to adapt to its way of working, you're not just changing your code today. You're potentially restricting what projects you can tackle tomorrow, what data sources you can integrate next quarter, and what innovative workflows you might need next year.
We've seen teams hit a wall when they suddenly need to:
- Process a new data their platform wasn't designed for
- Scale to much larger datasets without completely rebuilding pipelines
- Support a research team that works differently from production
- Incorporate specialized tools or frameworks the platform wasn't built to accommodate
Use Valohai for computer vision today, NLP tomorrow. Start with unstructured data, expand to tabular data. Build research workflows or production pipelines. The platform adapts to your evolving needs—not the other way around.
You don't need to predict your ML future today. You just need tooling that keeps all your options open, no matter where machine learning takes your business next.
Valohai doesn't try to change who you are or dictate what you'll become. Unlike your opinionated IDE that's constantly suggesting "improvements" to your perfectly functional code, we accept you as you are—data quirks, legacy scripts, and all those "temporary" workarounds that somehow survived three team rotations. No judgment here. Trust me, we’ve seen worse.