Issue #56

Before You Ship the New Model, Run It in Shadow Mode First

sent to 20 subscribers

The riskiest kind of change to an AI feature isn't a new prompt — it's swapping the decision-maker behind an existing one. A new model version, a rewritten retrieval step, a different classification threshold: these pass your offline eval suite and still surprise you in production, because eval sets are a sample of the past and production traffic is whatever actually shows up.

Shadow mode is the cheap insurance most teams skip because it feels like extra plumbing. Run the new version alongside the current one on real production traffic, let the current version keep making the decisions that actually ship, and just log what the new version *would* have done. No user ever sees its output. You're not testing correctness in the abstract — you're testing it against the exact distribution of inputs your system receives, including the messy, malformed inputs that never made it into an eval set.

What makes shadow mode worth the setup cost is what it catches that offline evals structurally can't: integration bugs the new version chokes on, distribution shift an eval set won't reveal, and — most usefully — the disagreement rate between old and new. Not just "is the new version right," but how often it differs from the old one, and on what kind of input. A high agreement rate with disagreement concentrated in one identifiable slice tells you exactly where to look before cutting over.

The setup is lighter than it sounds: an async call that doesn't block the response path, a sampling rate if full duplication is too expensive, and a comparison log you can query. You don't need a dashboard on day one — you need the two outputs sitting next to each other somewhere readable. Ship the cutover only once you've looked at real disagreements, not just an aggregate agreement percentage.

← Back to archive