← Blog
July 8, 202610 min readSeldon

The Silent Epidemic of LLM Technical Debt

Technical debtLLM opsArchitecture

Startups are discovering that the fastest way to prototype AI products may also be the fastest way to bury core application logic inside prompts.

During the MVP phase, the LLM bill usually looks harmless.

A few cents per call. A few hundred users. A few prompt chains. Maybe a frontier model handles classification, extraction, formatting, routing, summarization, and a few pieces of business logic that nobody has had time to formalize yet.

It works. The demo is impressive. The founder ships.

Then the product starts to grow.

One workflow becomes ten workflows. One user triggers twenty model calls where the team originally assumed two. Support tickets, sales calls, documents, invoices, emails, transcripts, filings, CRM notes, and internal records all start flowing through the same frontier-model bottleneck.

The bill rises. Latency becomes visible. Outputs remain non-deterministic. The prompt that was supposed to be temporary becomes production infrastructure.

The startup has not merely adopted LLMs. It has accidentally encoded its backend logic inside a probabilistic text interface.

This is the tarpit many AI startups are now entering.

What founders and builders told us

We recently ran an informal discussion with startup founders, operators, and technical builders about a simple question:

How much production LLM usage is truly open-ended reasoning, and how much is repetitive extraction, classification, normalization, transformation, or workflow routing?

The responses were strikingly consistent.

One founder described using a frontier model during the early phase for classification, then replacing it with a much smaller fine-tuned model running locally. Their reported cost reduction was around 90%. The hardest part was not the migration itself. It was convincing the team to prioritize the migration while the GPT-based version still appeared to be "working fine."

Another builder described using an LLM as a cold-start engine. The model classified notes into categories, generated enough labeled data, and was then replaced by a cheaper classifier. In that workflow, the LLM was not the final system. It was the tool that helped create the training set for the final system.

A third operator described a tiered architecture: regex and rules for the predictable 80%, cheaper models for simple high-volume tasks, caching for repeated entities, and frontier LLMs only for ambiguous cases that actually require reasoning.

A data professional with more than a decade of experience put it bluntly: LLMs are excellent for prototypes, but for scale-critical data work, they are costly, slow, and high variance. Their pattern is to start with LLMs, then migrate stable extraction and transformation tasks into Python and data pipelines.

Another commenter raised the question that many teams skip entirely: what percentage of production LLM calls are actually measured by workflow type? Without instrumentation, teams cannot tell which calls are open-ended reasoning, which are deterministic extraction, and which are simply expensive formatting.

That may be the central issue.

Many teams do not know where their AI system ends and their data pipeline should begin.

The real problem is not just cost

The obvious pain is cost.

Token spend looks manageable in the prototype, then compounds with usage. A workflow that costs a few cents may become painful when it runs hundreds of thousands or millions of times. Worse, model usage often scales faster than user count, because one user action may fan out into many model calls.

LLM calls / spendUsersTime / adoption →PROTOTYPE / PoCPRODUCTION
Fig. 1 — Model spend compounds faster than users

But cost is only the visible symptom.

The deeper problem is that the application becomes difficult to reason about.

A conventional backend has functions, schemas, tests, interfaces, state machines, validators, logs, and typed data. A prompt chain often has none of those things. It may contain business rules, parsing assumptions, formatting instructions, routing logic, and validation criteria, but all of that logic lives in natural language.

When something breaks, debugging becomes strange. Was the source data wrong? Did retrieval fail? Did the prompt become too long? Did the model change behavior? Did the schema drift? Did a new edge case appear? Did the LLM infer something it should not have inferred?

One commenter asked how a company can support a product built on non-deterministic behavior. What happens when a customer complains that their data was mangled? Do you say the logic is inside a model and the output may vary?

That question is uncomfortable because it exposes the production gap. LLMs are wonderful at absorbing ambiguity. Production systems are supposed to reduce ambiguity.

LLMs are becoming the new prototype layer

The most useful way to think about LLMs is not as permanent replacements for all backend logic. They are often better understood as a prototype layer.

An LLM lets a team discover the shape of a workflow before the workflow is fully understood. It can handle messy inputs, infer likely structure, generate early labels, propose schemas, normalize records, and produce useful outputs before the team has committed to a data model.

That is valuable. In many cases, it is the right way to begin. The mistake is assuming the prototype layer should remain the production runtime.

Many successful workflows seem to follow the same arc — from an exploration phase served by the frontier model to a production phase served by deterministic, compiled code, with the model kept only as a fallback:

Exploration · frontier modelProduction · deterministic + fallbackAmbiguous taskPrompt prototypeRepeated usageStable I/OExplicit schemaCompiled + fallback
Fig. 2 — A workflow matures from exploration to production

The frontier model is useful in the beginning because the workflow is not yet known. Once the workflow stabilizes, continuing to use the same frontier model for every request may be a form of technical debt.

The question every AI startup should ask

For each LLM call in production, ask:

Is this call doing reasoning, or is it doing data engineering?

Many calls that appear intelligent are actually performing familiar data tasks:

  • Extract this field.
  • Classify this ticket.
  • Normalize this company name.
  • Convert this note into JSON.
  • Match this customer to an account.
  • Decide which bucket this record belongs to.
  • Validate whether this document has the required clauses.
  • Summarize this highly templated call into a fixed structure.
  • Route this workflow to the next state.

Those tasks may require an LLM during exploration, especially when the input is messy. But after enough examples, many of them become candidates for more deterministic implementation.

The practical question is not whether LLMs should be removed. The practical question is where they should sit in the stack. In mature systems, the LLM should move from the hot path — where every request pays for it — to the exception path, reached only when a cheap deterministic route is not confident enough:

BEFOREEvery requestFrontier LLMOutputevery request pays the frontier costAFTERCompiled pathFrontier LLMEvery requestconfidence gate≈10%Frontier LLM≈90%Deterministic, cache,classifier or small modelOutput
Fig. 3 — Move the frontier model from the hot path to the exception path

The goal is not to eliminate LLMs. The goal is to stop using them as expensive glue code.

How to identify LLM calls that should become traditional systems

The first step is instrumentation. Do not look only at total LLM spend. Look at unit economics by workflow.

A useful trace should include the prompt family, input type, model, token count, latency, cost, output schema, downstream action, user feedback, and whether the response was accepted, edited, retried, or discarded.

Once traces exist, group calls by workflow rather than by endpoint. For example, a startup may discover clusters such as:

  • Extract support ticket category
  • Normalize vendor names
  • Convert call transcript into CRM update
  • Summarize earnings call into KPI table
  • Classify document risk
  • Generate follow-up email
  • Match user query to internal object

Each cluster should then be scored for "compilability." A workflow is a good candidate for replacement when the inputs and outputs are stable, the output schema is recurring, the task is repeated at high volume, the acceptable answer can be validated, and the business logic can be expressed as rules, data transformations, small models, or retrieval over known data.

A workflow is a poor candidate when the task is truly open-ended, the output is subjective, the context changes radically across requests, or the value comes from creative synthesis rather than structured transformation.

Plotting workflows by volume and ambiguity makes the priority obvious — the high-volume, low-ambiguity corner is where compiling pays off first:

COMPILE FIRSTRoute / cache / cheaper modelLow ROI — leave for nowKeep frontier LLMExtract fieldsClassify ticketNormalize entitySummarize callDraft follow-up emailDraft GTM strategyOpen-ended Q&ARare one-off parselow ambiguityhigh ambiguity →↑ volume
Fig. 4 — Which calls to compile first

Here is a practical rubric.

1. Look for repeated prompt families

If the same prompt template appears hundreds or thousands of times, it is a candidate. Examples include:

  • "Extract the following fields from this document…"
  • "Classify this ticket into one of these categories…"
  • "Turn this transcript into this JSON schema…"
  • "Normalize this entity name…"
  • "Determine whether this record matches this account…"

Repetition is the first signal that the task has stabilized.

2. Look for structured outputs

If the LLM is mostly producing JSON, tables, labels, scores, tags, or constrained summaries, it may not need a frontier model forever. Structured output is a sign that the team already knows what shape the answer should have.

Once the shape is known, the next question is whether a parser, classifier, extraction model, SQL query, or ETL pipeline can produce the same structure more reliably.

3. Look for low-variance decisions

Some LLM calls produce the same kind of answer again and again. For example:

  • Ticket category: billing
  • Risk level: medium
  • Document type: invoice
  • Entity type: company
  • Workflow route: human review

If the output space is small, this is often a classification problem disguised as a reasoning problem. A small fine-tuned model, embedding classifier, gradient-boosted model, or even rules may be sufficient.

4. Look for repeated entity resolution

Entity matching is one of the most common hidden LLM uses. Teams ask models to match names, vendors, customers, companies, products, accounts, tickers, people, or documents across messy text and internal systems.

At low volume, this is convenient. At scale, it often wants to become an entity-resolution pipeline with canonical IDs, aliases, confidence scores, fuzzy matching, embeddings, and human review queues.

5. Look for transformations that can be validated

A call is easier to replace when its output can be checked. For example:

  • Does the JSON match the schema?
  • Does the extracted date parse?
  • Does the currency code exist?
  • Does the company map to a known account?
  • Does the total equal the sum of the line items?
  • Does the ticket category belong to the allowed taxonomy?

If validation is possible, replacement becomes safer.

6. Look for high-volume, low-ambiguity calls

Not every expensive call should be replaced first. The best candidates are high-volume and low-ambiguity. Replacing a rare strategy-generation call may not matter; replacing a million monthly calls that convert text into a known JSON schema may materially improve margins.

A useful prioritization score is:

Compilation priority =
  volume × cost × repetitiveness × schema stability × validation ease

The highest-scoring calls are where teams should start.

7. Look for hidden data models

Some repeated LLM calls indicate that the product is missing a real data model. If users repeatedly ask:

  • Which accounts are at renewal risk?
  • Which companies changed guidance?
  • Which tickets are likely escalations?
  • Which contracts have unusual terms?
  • Which prospects need follow-up?

the answer may not be a better prompt. The answer may be a table that should exist. For example:

  • account_health_scores
  • renewal_risks
  • support_escalation_signals
  • contract_clause_flags
  • opportunity_next_actions
  • company_guidance_changes

This is where the problem stops being LLM optimization and becomes data engineering. The LLM traffic is revealing the data model the company has not built yet.

A useful migration pattern

The most pragmatic architecture is tiered — cheap, deterministic tiers handle the bulk of traffic at the base, and the frontier model is the narrow, expensive tip reserved for genuine ambiguity:

Rules, regex, parsersTraditional ML / classifiersSmall language modelsFrontier LLMsmosttrafficrarecost per call ↑Compiled / deterministicFrontier LLM
Fig. 5 — A tiered architecture: cheap by default, frontier at the tip

This is not anti-LLM. It is proper systems design. Use frontier models when ambiguity is high, labels are scarce, schemas are unstable, and the product is still discovering what users need. Use traditional systems when the workflow has become repetitive, measurable, and economically important.

One founder in our discussion described this pattern well: rules handle the predictable majority, and LLMs handle the ambiguous minority. That is likely the shape many production AI systems will converge toward.

The new technical debt

Every technology wave creates its own form of technical debt. With cloud, teams discovered that easy provisioning could turn into runaway infrastructure spend. With microservices, teams discovered that decomposing everything created operational complexity. With LLMs, teams are discovering that prompt-driven development can turn into hidden application logic.

The debt is not that LLMs were used. The debt is that nobody knows which LLM calls have matured into stable workflows.

The dangerous system is not the one using LLMs. The dangerous system is the one using LLMs without trace-level visibility, workflow-level unit economics, schema validation, fallback policies, or a migration path.

What teams should do now

Start by logging LLM calls with enough metadata to understand them later. Group calls by workflow. Measure cost and latency per workflow, not just per model. Identify which workflows produce structured outputs. Track which outputs are edited, retried, accepted, or rejected. Look for prompt clusters that are high-volume and low-variance.

Then classify each workflow into one of five buckets:

  • Keep as frontier LLM
  • Route to cheaper model
  • Cache or retrieve
  • Replace with traditional ML/NLP
  • Rebuild as backend logic or ETL

Do not try to replace everything. Start with one painful workflow — the one with the clearest schema, highest volume, easiest validation, and most obvious cost impact:

  • Build a deterministic or smaller-model version.
  • Run it in shadow mode against the current LLM path.
  • Compare outputs.
  • Promote it gradually.
  • Keep the LLM as a fallback for low-confidence or out-of-distribution cases.

This is how AI prototypes become production systems.

The bigger shift

A lot of AI products today are prompt chains pretending to be applications. That is not necessarily bad — prompt chains are a fast way to discover what the application should become. But if the product succeeds, the prompt chain should not remain the architecture forever.

The startup has to ask what the LLM has taught it. What entities matter? What fields recur? What decisions repeat? What state transitions exist? What validation rules are emerging? What tables should exist? What workflow has the team accidentally discovered?

The next generation of AI infrastructure will not only route calls between models. It will help teams understand which model calls should stop being model calls.

The winning AI products will not be the ones that use LLMs everywhere. They will be the ones that learn when not to.

Open beta

Route your traffic through Seldon and watch recurring work turn into cheaper pipelines.

Sign up for open beta →
The Silent Epidemic of LLM Technical Debt | Seldon