RC RANDOM CHAOS

You keep polishing the ceiling while the floor gives way

Raw model capability sets the ceiling; schemas, validation layers, and deterministic pipelines decide whether an AI system is reliable enough to ship.

· 11 min read
You keep polishing the ceiling while the floor gives way

A model that answers correctly 95% of the time is not 95% useful in production. It is a liability the other 5% of the time, and that 5% is where the workflow breaks, the cost spikes, and the user stops trusting the system. The industry spent three years optimising for capability - bigger context windows, higher benchmark scores, more parameters. That race is largely settled as a differentiator. The models are good enough. The problem now is that good enough on average is not the same as reliable every time, and reliability is what production systems are actually built on. The shift worth paying attention to is not from small models to large ones. It is from novelty to reliability: from systems that impress once in a demo to systems that hold up on the ten-thousandth run.

Quality here is not a vibe or a marketing word. It is a measurable property of the system around the model: defined inputs, validated outputs, deterministic control flow, and known failure behaviour. A plain pipeline with a mediocre model will beat a brilliant model wrapped in a fragile prompt every time you measure it over a week of real traffic. That is the whole argument in one line. Raw capability sets the ceiling. Reliability decides whether you ever reach it. Most teams are still tuning the ceiling and wondering why the floor keeps giving way.

If you take one thing from this: stop asking which model is smartest and start asking which parts of your system are allowed to be non-deterministic, and what catches them when they fail. The teams shipping AI that actually removes work have already made that shift. The teams still stuck in pilot purgatory, running their fourth proof-of-concept in eighteen months, usually have not. They keep upgrading the engine and ignoring the fact that the car has no brakes.

A language model is a probability distribution over tokens. Give it the same prompt twice and you can get two different answers, both plausible, one wrong. In a chat window that variance reads as range and creativity. Inside an invoicing pipeline, a support router, or a code generator that feeds a compiler, the same variance is an intermittent bug with no stack trace. Nothing crashed. The output was just quietly wrong, and it will be wrong differently next time, which makes it hard to catch and harder to reproduce. Determinism is not a nice-to-have in that setting. It is the difference between a system you can operate and a system you can only apologise for.

Capability grew faster than the tooling to constrain it, and that is the real story of the last few years. The winning move was to expose more raw capability - let the model write freely, reason in the open, call tools on its own judgment. That works in a demo because a human sits in the loop absorbing every mistake in real time. Production has no such human. The output flows straight into the next system, and every unhandled edge case compounds downstream. The distance between worked when I tried it and works on every input at 2am is exactly the distance between novelty and reliability. Demos hide that distance. Traffic exposes it.

The correction is not a smarter model. It is structure around the model. Define the shape of the input. Constrain the model to a schema. Validate the output before anything downstream touches it. Make the control flow - retries, fallbacks, routing - deterministic and inspectable. The model stays probabilistic where probabilistic is valuable, in interpretation, generation, and judgment, and everything around it is engineered to be predictable. This is not new engineering. We have always wrapped unreliable components - networks, disks, third-party APIs - in validation and retries. An LLM is another unreliable component with an unusually good vocabulary. The novelty of talking to it made people forget the discipline they already knew.

Reliability also carries a bill, and this is the part demos never show. Every retry, every validation pass, every fallback to a larger model costs latency and money, and those costs scale with traffic in ways a single test run cannot reveal. A system that looks cheap at ten requests a day can become unaffordable at a hundred thousand. One that feels instant for one user can stall under concurrency. Treating quality as a system property means budgeting for these trade-offs on purpose, in the design, instead of discovering them during a production incident when finance and on-call are both awake and unhappy.

The most common mistake is treating quality as a property of the model instead of the system. When output is wrong, the instinct is to reach for a bigger model or a cleverer prompt. Sometimes that helps at the margin. It never fixes the structural problem, because the failure was not that the model was not smart enough. It was that nothing in the system verified the output before it was used. Swap the model underneath and the same class of failure returns, just less often - which is arguably worse, because rare failures are the ones nobody is watching for.

The second bad pattern is reaching for autonomous agents when a deterministic pipeline would do the job. Agents demo well and feel like the direction of travel, so they get deployed for work that never needed them. But every agent that plans its own steps, picks its own tools, and decides when it is finished injects non-determinism and surface area precisely where you wanted predictability. Most tasks people hand to agents are fixed sequences: extract, transform, validate, route. That is a pipeline. Wrapping it in an agent buys flexibility the task never asked for and pays for it in cost, latency, and new failure modes. Agents earn their place only when the path genuinely cannot be known ahead of time, and even then they belong inside deterministic guardrails, not in place of them.

The third is blind trust in output. A surprising number of production systems take model output and act on it directly - send the email, run the query, approve the refund - with no schema check, no confidence threshold, no human review on the risky path. It holds together in testing because testing traffic is well behaved. Real traffic is not. Validation is not insurance you bolt on later. It is the mechanism that converts a probabilistic model into a dependable component, and skipping it is how AI-powered quietly turns into AI-caused. Underneath all three mistakes sits one root error: mistaking a working demo for a working system. A demo proves capability exists. It proves nothing about reliability, cost at scale, or behaviour on inputs you did not anticipate. Benchmark scores share the same blind spot - they measure average performance on curated tasks, not worst-case behaviour on your messy, adversarial, real-world data. The teams that get burned are the ones who watched the demo work, assumed the hard part was done, and shipped. The demo was never the hard part. Everything that makes the demo repeatable is.

The approach that holds up treats the model as one constrained step inside a pipeline, not as the pipeline itself. You define the input contract, force the output into a schema, validate that output against both structure and business rules, and only then let anything downstream act on it. Concretely: normalise the input into a known shape, call the model with structured output or function calling so it must return typed fields, parse the result through a schema validator, run semantic checks against your own data, then gate on the outcome - accept, retry with a corrective message, fall back to a stronger model, or route to a human. Every one of those steps is deterministic. The only probabilistic component is the generation itself, and it is boxed in on all sides.

Validation is where most of the reliability actually comes from, and it splits into two layers that catch different failures. Structural validation is cheap and answers a narrow question: did the output parse, are the required fields present, are the types right, do the dates and numbers actually decode. That alone kills a large share of malformed output before it moves. Semantic validation is where you catch the plausible-but-wrong answer - the number that parses fine but does not match the line items, the category that is not in your allow-list, the reference ID that points to nothing. Structural checks tell you the shape is correct. Semantic checks tell you the content is defensible. Anything that fails either layer takes a defined path: a bounded retry, an escalation, or a human queue. Nothing fails silently, and nothing gets a second chance it was not designed to have.

The control flow around all of this has to be predictable or the reliability leaks straight back out. Cap retries so a bad input cannot loop forever and burn budget. Pin temperature low where you want repeatability. Use idempotency keys so a retry does not double-post or double-charge. Log the input, the raw output, and the validation result for every single run, because a failure you cannot reproduce is a failure you cannot fix. Then build an evaluation set out of real traffic - the messy, adversarial, edge-case inputs your system actually saw - and replay it against every change before you ship. Budget cost and latency in the design, not in the incident: know your p95, know your cost per thousand runs, set a ceiling, and alert before it moves. This is ordinary systems engineering pointed at an unusual component. None of it is clever. All of it is what separates a system you operate from a system you keep explaining.

Take a finance team pulling thousands of supplier invoices a month out of PDFs and into a ledger. The naive build is one step: extract the text, hand it to the model, ask for JSON, write the JSON to the ledger. It demos perfectly. In production, three to five percent of invoices come back with a misread total, a transposed date, or a line item the model invented to make the maths look right - and those flow straight into accounts payable, where nobody is checking because the pipeline said it was done. The system worked on the invoices someone tested with. It failed on the ones that mattered, and it failed quietly.

The reliable version is the same idea wrapped in structure. Text extraction stays deterministic. The model step is constrained to a schema - vendor, invoice number, date, line items, subtotal, tax, total - returned as structured output at temperature zero. Then the validation layers run. Structural first: every field present, dates parse, amounts are numbers. Semantic next: the line items sum to the subtotal, subtotal plus tax equals the total, the vendor exists in the master list, and the invoice number has not been processed before. That last check is your idempotency guard against paying the same invoice twice. Anything that fails a check, or lands below a confidence threshold, routes to a human review queue - but the reviewer sees the one flagged field, not the whole document dumped on their desk. The arithmetic check alone earns its keep, because a hallucinated line item almost always breaks the sum, which turns a silent content error into a loud, catchable one.

Run ten thousand invoices through that and roughly ninety-five percent clear every check and post automatically. The remaining five percent reach a person who resolves them in seconds because the failure is already localised. Cost stays bounded: one cheap model call plus near-free validation on the common path, with the expensive fallback to a larger model reserved for the small slice that needs it. The model in this system is not smarter than the model in the naive one. It is often the identical model. What changed is that the output now has to earn its way into the ledger, and there is a full audit trail - input, output, decision - so when something does slip through, you can reproduce it and close the gap instead of guessing which of ten thousand runs went wrong.

The capability race is largely over as a differentiator, and pretending otherwise is how teams stay busy without shipping. What separates the teams whose AI actually removes work from the teams running their fourth proof-of-concept is not the model on the invoice. It is whether they built the structure around it: a defined input contract, validation before anything acts, deterministic control flow, and a known place for failures to go. Quality is not a smarter model you are waiting for. It is a property of the system you are choosing not to build yet.

The move is small and you can make it this week. Take one AI feature that is in production or heading there and ask three questions of it. What is the input contract. What validates the output before anything downstream acts on it. Where does a failure go. If any answer is nothing, or we trust the model, you have found the work - and it is not a model upgrade. It is a schema, a validator, and a queue. That is unglamorous, and it is exactly the part that decides whether the thing survives contact with real traffic.

Novelty impresses once, in a demo, in front of people who will forgive the miss. Reliability compounds, quietly, across every run nobody is watching. The demo was always capability, and capability was never the hard part. Everything that makes the demo repeatable - the contracts, the validation, the deterministic plumbing, the boring stuff that has been undervalued for three years while everyone stared at benchmark scores - is the hard part, and it is engineering, not magic. Making quality the norm means making it measurable, making it the default, and refusing to ship systems you can only apologise for. Set the ceiling with the model. Decide whether you reach it with the system around it.

Share

Keep Reading

Latest on the Wire

Full wire →

New signal daily · RSS

Stay in the loop

New writing delivered when it's ready. No schedule, no spam.