For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Sign inTry it free
DocsGuidesSDKsIntegrationsAPI docsTutorialsFlagship blog
DocsGuidesSDKsIntegrationsAPI docsTutorialsFlagship blog
  • Flagship blog
    • If You Can Survive a Toddler, You Can Ship LLMs in Production
    • 52 Blog Posts, Claude, 3 Prompts, Under an Hour
    • Shipping from Oakland: An Observability Hackathon Recap
    • Day 12 | New Year, New Observability
    • Day 11 | What engineering teams really want from Observability
    • Day 10 | Why observability and feature flags go together like milk and cookies
    • Day 9 | The Three Ghosts Haunting Your AI This Holiday Season
    • Day 8 | Observable Multi-Modal Agentic Systems
    • Day 7 | SLOs that actually drive decisions
    • Day 6 | Stop cardinality from stealing your cloud budget
    • Day 5 | Using a Popular Tidying Method to Consolidate Your Observability Stack
    • Day 4 | Tracing the impact of feature flags in your Node.js app
    • Day 3 | Zero-Config Observability with OpenTelemetry
    • Day 2 | Why AI agents need three layers of observability
    • Day 1 | Observability Under the Tree: What Changed in 2025
    • 5 takeaways from my first PyCon JP conference
    • Dungeons & Downtimes: XP gained from our adventure
    • Reverse Proxy for custom domains
    • Adventures in dogfooding: Guarded Releases
    • A quick tool for npm package scanning
    • My DEF CON 33 experience
    • Make every launch a big deal
    • Fun with JS streams
    • Moonshots XXII: Hack to the Future recap
    • A tale of three rate limiters
    • My good friend Claude
    • My approach to React app architecture in 2025
    • Data isolation with ClickHouse row policies
    • Ingest and Visualization for OpenTelemetry Metrics
    • Alert Evaluations: Incremental Merges in ClickHouse
    • Optimizing ClickHouse: The Tactics That Worked for Us
    • Migrating from OpenSearch to ClickHouse
    • Revamping Privacy Mode: A Better Way to Obfuscate Sensitive Data
    • An open-source session replay benchmark
    • LLM-based Grouping of Errors
    • Building GitHub Enhanced Stacktraces
    • Vercel Edge Runtime Support
    • Finding Interesting Sessions with Markov Chains
    • Building Logging Integrations at LaunchDarkly
    • The Network Request Details Panel
    • Using Github as a Headless CMS
    • Your Source Maps Should Be Public
    • Supporting Outside Contributions at LaunchDarkly
    • Managing our design tokens at LaunchDarkly
    • Our Commitment to OpenTelemetry
    • The 5 Best Logging Libraries for Ruby
    • InfluxDB: Visualizing Millions of Customers' Metrics using a Time Series Database
    • 8 Tips to Help You Maximize Chrome DevTools
    • The Debugging Process and Techniques for Web Applications (Part 2/2)
    • 5 Best Node.js Logging Libraries
    • What are rage clicks and how to detect them
    • 5 Best Practices for Maintaining a Clean ReactJS App
    • Is Kafka the Key? The Evolution of LaunchDarkly's Ingest
    • What Is Full Stack Monitoring and How Does It Work?
    • The beauty of contact-first API design
    • What is Frontend Monitoring and What Tools Help You Do It?
    • 5 strategies to monitor the health of your web application
    • Configuring OpenSearch for a Write-Heavy Workload
    • Maximizing Our Machines: Worker Pools At LaunchDarkly
Sign inTry it free
LogoLogo
On this page
  • What parents of small children already know about non-determinism
  • The LLM-as-judge can drift too
  • Temperature settings can’t make a model deterministic
  • Build the fallback before the happy path
  • What changed for me
Flagship blog

If you can survive a toddler, you can ship LLMs in production

Was this page helpful?
Previous

52 Blog Posts, Claude, 3 Prompts, Under an Hour

Next
Built with

Published May 12th, 2026

Portrait of Scarlett Attensil.

by Scarlett Attensil, LaunchDarkly

A few years back, I was running a time-series pipeline that scored incoming product reviews on a 1-10 scale. The scorer was a Large Language Model (LLM) with reviews rolled in continuously and ratings flowed into a dashboard which the product team checked every Monday morning. Everything ran clean for months. Then one Monday the chart had a step in it.

Reviews from the prior week averaged 6.4. The current week averaged 7.6, for the same product and the same customers. When I went back to read them, the reviews looked indistinguishable from what we had been getting all year.

The model had changed. The provider had pushed a quiet update to the weights, and the LLM that gave us 6.4-equivalent scores last week was now giving 7.6-equivalent scores for the same content. Every historical comparison in that dashboard was silently invalid. The cleanup took a week. The harder conversation was about how much of our reporting had been real in the first place.

That kind of failure is the default behavior of LLMs in production, and trying to engineer it away with tighter parameters or pinned versions is a losing fight. The job is to design with those failures in mind. I learned this lesson twice: from the reviews pipeline, and from raising two kids.

What parents of small children already know about non-determinism

If you have lived through the toddler years, you have run this experiment a few hundred times without calling it that. The lunch you packed all last week, the one that came home empty every day, suddenly gets pushed off the table on Tuesday with full commitment. The bedtime story that worked for six straight nights stops working on the seventh. The nap routine the babysitter swore was solid breaks the moment you start calling it a “rule.”

Experienced parents eventually stop trying to force determinism on the kid. Patterns and trends still matter, but you stop expecting any individual input to produce any individual output. Instead, you build a system that absorbs the variance and doesn’t fight it. This is the same shift AI engineers make in production, usually after their first calibration regression.

The LLM-as-judge can drift too

In that reviews pipeline, the LLM wasn’t generating content; it was grading it. Each incoming review went to the model with a rubric, and the model returned a 1-10 score that rolled up into the weekly dashboard. That makes the LLM a judge: a model whose only job is to evaluate other inputs against a standard. And the pipeline taught me the judge can be the most fragile thing in the system. The model being evaluated can drift. The model doing the evaluating can drift too. And unless you have something stable to anchor against, you can’t tell which model is causing the change.

The pattern that works is a small held-out set of inputs with known, human-validated scores, and the habit of re-running it on a regular cadence. You can call this set of inputs the “calibration set,” and it’s likely you already have enough data to establish your own. You only need 20 to 50 examples to test.

When a model changes, re-score the calibration set. If the average jumps despite no other changes, like ours did from 6.4 to 7.6, you know the judge moved, not the data. Without a calibration set to validate against, the same diagnosis could have taken weeks of reading individual reviews and arguing about what changed.

This is where AgentControl’s offline evaluations are most useful. You upload your calibration set as a dataset, point a judge at it, and re-run on a cadence or before any variation change. The discipline I had to implement manually (keep the judge anchored, keep its inputs comparable, watch the distribution rather than any single response) becomes a property of the configuration, instead of a script someone has to remember to run.

The parenting version of this example is the pencil marks on a doorframe. The doorframe does not move. Every few months you put the kid against it, shoes off and back to the wall. If the line jumps three inches and you realize the kid is wearing sneakers, you take the shoes off and measure again before you believe the kid has grown three inches. The doorframe is your calibration set. The shoes-off rule is the discipline that keeps re-runs comparable.

Temperature settings can’t make a model deterministic

Some models let you set a temperature to try to force a deterministic output by selecting the highest-probability token at each step. It minimizes creativity, randomness, and hallucination. But 100% determinism is not guaranteed. My reviews pipeline had been running at temperature zero, but was still impacted by the provider model’s change. Temperature zero makes the output deterministic for a given model, but it can’t protect you when the model itself is swapped out. Once the weights changed, greedy sampling was faithfully selecting the highest-probability tokens from a different model, so the scores shifted no matter how the temperature was set.

Temperature zero compresses the variance you can see during testing, which makes you feel safer, but does nothing about the variance that actually breaks production. Design as if the model can produce a different valid output every time, because eventually it will.

Build the fallback before the happy path

Before you ship the model that does a new thing well, ship the path that runs when the model does the new thing badly, slowly, or not at all. It’s easy to skip this step, but that’s part of what makes it so important.

For an LLM endpoint, preparing a fallback path can include:

  • a cached response for known-bad inputs
  • a secondary model behind the primary that can take traffic when the primary fails an inline check
  • a circuit breaker that routes around the model entirely if error rates cross a threshold
  • a logging path that captures failure cases instead of returning a stack trace to the user

You must assume the model will misbehave at some point and define useful response behaviors for when it does.

You can implement these responses in an adaptive system that watches the production signal itself and mitigates bad performance without a human in the loop. This is what configuration-driven LLM tooling is built for. With LaunchDarkly AgentControl, different models live as configuration rather than code, traffic can shift between them without a deploy, and a guarded release can use an online evaluation score, or any other AgentControl metric, to determine whether a variation advances, pauses, or reverts. When the judge sees scores regress past a threshold, the rollout reverses itself. The fallback stops being a piece of code that needs human implementation and becomes the architecture, watching itself.

Parents already operate this way. The grocery store meltdown will happen. The school will call at 11am about a “low-grade fever.” You have a snack pre-stuffed in your bag and a backup babysitter on text. The fallback is the architecture. The happy path is the bonus.

What changed for me

After the reviews pipeline incident, my work changed. I started logging the model version returned in every API response. I built a calibration set. I stopped trusting any single eval run as a verdict. The boring fallback path now ships before the impressive demo path.

Embrace this method of thinking and working to create robust, failure-tolerant systems and create meaningful results. You just have to accept what every parent of a small kid already knows: the interesting measurement is the distribution, not a single sample.