Rok Garbas

Give AI a Stable Home and Let It Surprise You

I watched a chef burn a steak last week. Good chef, nice restaurant, just one of those nights. Same recipe he’s made a thousand times, different result. That’s cooking. And honestly? AI works the same way. Same prompt, different answer, every time.

Neither one will ever be fully predictable. Took me a while to be okay with that.

What does work in a kitchen, though? Nobody succeeds by eliminating surprises. You keep the place clean. Ingredients fresh. Knives sharp. You control the stuff you can control, and the creative parts find their own way.

So what if we treated AI the same way? Stop trying to make it deterministic. Just give it a clean kitchen.

The Problem

I got into reproducible environments for selfish reasons, honestly. I was tired of “works on my machine.” Locked dependencies, immutable builds, deterministic tooling. Nix made most of this possible, once I survived the learning curve.

But lately something funny happened. maybe all that plumbing I laid down for myself is secretly what AI was missing too.

If you’ve used AI tools for any real project, you know. You build a model, deploy it, and the other machine gives you different numbers. Run the same prompt twice, two different answers. Your teammate tries your code, something else entirely.

And this isn’t a bug you can fix. Temperature, sampling, model updates. It’s non-deterministic at every layer.

The first thing everyone tries is fighting it. Pin the model version. Crank temperature to zero. Force consistency wherever possible.

I tried that too. It’s like timing your cooking down to the microsecond. Sure, you get consistency. You also get food nobody remembers.

Something That Happened

I was talking to a team last month. They’d built an AI feature, demoed it internally, looked great. Staging, perfect. Production? Total chaos. Outputs nobody had seen during testing.

They spent two days pulling their hair out before someone checked the Python versions. Production had 3.10.11. Staging had 3.10.9. The devs’ laptops were running 3.11.2. Three patch versions. Three different NumPy behaviors. Completely different AI outputs.

Same model. Same prompts. Same code. The ground underneath had shifted just enough to cascade through numerical precision and library behavior into wildly different results.

We’ve all dealt with “works on my machine.” This is that problem, but worse. Traditional software bugs stay bugs. AI environmental differences produce behavior that looks intentional and is almost impossible to trace back to the cause.

Every story like this is really an environment problem wearing an AI mask.

Clean Up the Kitchen

You can’t make AI predictable. Fine. But you can make everything around it predictable, and that changes the game more than you’d think.

Lock your dev environment. Pin your dependencies. Make your builds reproducible. Now AI’s randomness is the only variable left. That’s a totally different debugging experience.

Weird AI output? At least you know it’s actually the AI. Not some invisible difference between your laptop and prod. Not a dependency that upgraded itself overnight.

Your teammate clones your setup and gets a different result? Now you’re looking at genuine AI variance, not environment drift. That distinction matters more than people realize.

And there’s a compounding effect with iteration speed. When your test cycle is 10 minutes instead of 2 hours because you’re not wrestling with environment issues, you try more things. With AI, where the solution space is huge and your intuition is often wrong, the number of attempts matters more than almost anything.

The tools are out there. Nix for bit-for-bit reproducible builds. Docker for isolation. Even a careful requirements.txt with pinned hashes beats winging it. Pick whatever works for you. The point is the mindset: everything around AI should be a known quantity.

The Part I Didn’t Expect

For a long time I thought reproducible builds were just good hygiene. Discipline. The “right way” to do things, if you cared about craft.

Turns out they’re really about making room for the stuff you can’t control.

When the boring parts are locked down, when the kitchen is clean and the knives are sharp, you stop fighting your tools. You start paying attention to the interesting parts. The creative parts. The parts where AI actually shines.

You don’t need AI to be predictable if everything around it already is.

My chef friend still burns a steak now and then. His kitchen stays clean though. Ingredients fresh, knives sharp. Not because it prevents mistakes, but because it lets him focus on the cooking.

Give AI a clean kitchen. A stable home. Then get out of the way and let it surprise you.


I’ve spent twenty years getting dev environments to behave, and somehow I ended up writing about kitchens. I’m giving talks on AI and developer tooling in 2026. Say hi.