AI App Development: LLM Features in Product
LLM features that hold up in production. An evaluation set before the feature ships, cost controlled by design, and data boundaries settled before a provider is chosen.
- Who
- Delivered by a senior team assembled for the engagement, against a defined scope.
What you're seeing
- The feature demos well and behaves unpredictably with real users.
- Usually means It was built against a handful of inputs somebody chose. Real traffic contains the phrasings, the empty fields and the adversarial cases nobody thought to try, and there is no harness to catch the difference.
- Somebody changed a prompt and nobody can say whether it improved anything.
- Usually means There is no evaluation set, so quality is now a matter of opinion and it drifts silently. Every subsequent change compounds the uncertainty.
- Inference cost per active user is rising and nobody planned it.
- Usually means Context size, model tier and caching were never decided per call path. All three are design choices, and they are considerably cheaper to make before the feature has traffic.
- A customer asked what happens to their data and the answer took a week.
- Usually means The data boundary was set implicitly by whoever chose the provider. It is a design decision that was made by default, and it is now a sales blocker.
Evaluation before the feature
An AI feature nobody can grade cannot be improved and cannot be safely changed.
The harness is what converts a model swap from a gamble into an afternoon’s measurement. It is what lets you take the cheaper model when the cheaper model is good enough, and it is what tells you when it is not. It is also what makes retirement possible — an ungraded feature stays shipped indefinitely, because removing it feels like admitting a mistake rather than reading a number.
Building it means sitting with the people who know what a good answer looks like and writing that down, including the cases where the correct behaviour is to decline. That is a day of domain experts’ time and it is not delegable to engineers, which is the main reason it gets skipped.
Cost is a design output
Inference spend grows quietly, because nothing else in a normal stack is priced per request the way a model is. There is no pool to exhaust and no server to fall over. The bill simply moves.
Three levers account for most of it. Context that is larger than the task requires, usually because retrieval returns ten documents when two would do. The same answer purchased repeatedly, because nothing caches at the level where caching would help. And a frontier model answering questions a smaller model answers identically, which is invisible until there is an evaluation set to compare against.
All three are architectural, and all three are far cheaper to decide before the feature has users.
Traces are not audit logs
A model trace records what was generated. An audit log records what the system did and on whose authority.
They have different retention requirements, different access controls and different readers, and conflating them is discovered during an audit — at the point where somebody asks who authorised an action and the only available record is a prompt and a completion. Where a feature takes consequential action on a user’s behalf, the two records are built separately from the start.
Where it sits
This is a capability under AI Consulting, which also carries the internal half — getting a measurable return from AI tooling inside the engineering team — and under Software Development when the feature is part of a larger build.
It leans on two neighbours. Backend & API supplies the retrieval layer, the caching and the interfaces the feature is reached through. And Observability Stack is where per-call cost, latency and failure rate actually become visible — an AI feature with no instrumentation is a bill with no explanation attached.
How the work runs
-
Build the evaluation set first
Real inputs with graded outputs, before the feature. It is what turns a prompt change from an argument into a measurement.
-
Design the retrieval
Where grounding is needed: chunking, embedding and ranking tested against the evaluation set rather than assumed from a tutorial.
-
Control cost per call path
Model tier, context size and caching decided per path. Inference cost is a design output and it is expensive to retrofit.
-
Settle the data boundaries
Which fields leave your infrastructure, what is retained, and what a self-hosted or EU-resident option would cost. Procurement and your auditor will both ask.
What arrives
- An evaluation harness with graded cases, running in CI
- A retrieval pipeline tuned against measured results
- A per-path cost model with caching and model tier chosen
- A data-flow record naming what leaves your infrastructure
What it costs your team
Domain experts to grade the evaluation set — usually a day in total, and not delegable to engineers.
How we decide
The evaluation set is built before the feature ships
Costs It delays the first release and requires a day of domain experts' time that cannot be delegated to engineers.
A feature nobody can grade cannot be improved and cannot safely be changed. With a harness, swapping a model is an afternoon's measurement; without one it is a gamble taken on the strength of a demo. It also makes stopping possible — an ungraded feature stays shipped because removing it feels like an admission.
Cost is designed per call path, not negotiated with a vendor
Costs It adds routing complexity early, for a bill that is currently small.
Three levers account for most inference spend: how much context is sent, whether the same answer is paid for twice, and whether a frontier model is answering a question a cheaper one answers identically. All three are architectural. Retrofitting them into a live feature means changing the shape of every call while it is serving users.
There is an explicit path for the model being wrong
Costs It constrains the product design, usually by requiring a human step somewhere the demo did not have one.
The failure mode of these systems is confident incorrectness, not unavailability, and a feature with no wrong-answer path will find its own — in front of a customer, at the point where the output has already been acted on. Confidence thresholds, a review step for consequential actions, and a record of what was generated are the difference between a bad answer and an incident.
Where this has run
Frequently Asked Questions
Sources
- OWASP — Top 10 for LLM Applicationsowasp.org
- Anthropic — documentationdocs.anthropic.com
- OpenAI — API documentationplatform.openai.com
- Regulation (EU) 2024/1689 — AI Acteur-lex.europa.eu
Page reviewed
