<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Yan</title>
    <description>The latest articles on DEV Community by Yan (@yaneyba).</description>
    <link>https://dev.to/yaneyba</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1341640%2Fc834a5a8-78af-4088-b0a0-e16c26970cb2.png</url>
      <title>DEV Community: Yan</title>
      <link>https://dev.to/yaneyba</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yaneyba"/>
    <language>en</language>
    <item>
      <title>7 controls your LLM demo needs before production</title>
      <dc:creator>Yan</dc:creator>
      <pubDate>Fri, 06 Nov 2026 16:18:51 +0000</pubDate>
      <link>https://dev.to/yaneyba/7-controls-your-llm-demo-needs-before-production-2l35</link>
      <guid>https://dev.to/yaneyba/7-controls-your-llm-demo-needs-before-production-2l35</guid>
      <description>&lt;p&gt;A demo proves the model can answer. It does not prove the system can be trusted with real users. The gap is not a better model. It is seven controls around the model, and a bare demo has none of them.&lt;/p&gt;

&lt;h2&gt;
  
  
  A working demo answers the wrong question
&lt;/h2&gt;

&lt;p&gt;A demo answers one question: can the model produce a good response? For an internal chatbot built from a gateway, a model, and a response formatter, the answer is usually yes. That is why demos feel close to done.&lt;/p&gt;

&lt;p&gt;Production asks different questions. Who is allowed to call this? How much can one caller use? What happens when the input is hostile or the output is wrong? When something breaks, can anyone see why? None of those are model questions. They are architecture questions, and the minimal path has no answer to any of them.&lt;/p&gt;

&lt;p&gt;Here are the seven controls that answer them, in the order a request meets them. Each one comes with a test you can run against your own system today.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Auth: who is allowed to call the model?
&lt;/h2&gt;

&lt;p&gt;Without auth, anyone who finds the endpoint can use your model, see whatever it can reach, and spend your budget. Internal tools are not exempt. "Internal" often just means nobody checked who can reach it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The test:&lt;/strong&gt; can you name every caller allowed to use the model, and does the system reject everyone else before the model runs?&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Rate limiting: how much can one caller use?
&lt;/h2&gt;

&lt;p&gt;Model calls are slow and expensive. One script stuck in a loop, one runaway agent, or one eager power user can starve everyone else and run up the bill. Without a rate limiter, your capacity plan is whatever your busiest caller decides it is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The test:&lt;/strong&gt; what happens when one caller sends a thousand requests in a minute? If the honest answer is "we would find out from the invoice", you need a limit.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Input guardrail: what reaches the model?
&lt;/h2&gt;

&lt;p&gt;Every request is untrusted input. Some of it will try to override your instructions, pull out data, or push the model somewhere it should not go. A system prompt that says "ignore malicious requests" is a hope, not a control. An input guardrail inspects the request before the model sees it.&lt;/p&gt;

&lt;p&gt;This is the gap LLM Architect marks as critical on a bare demo, because without it the system has no defense against prompt injection at all.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The test:&lt;/strong&gt; if a user types "ignore your previous instructions", which component sees that before the model does?&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Output guardrail: what leaves the system?
&lt;/h2&gt;

&lt;p&gt;Clean input does not guarantee a safe answer. Models can leak personal data, invent a policy, or give advice your company would never give, and all of it looks like a normal response until someone reads it. An output guardrail checks the response before it reaches the user.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The test:&lt;/strong&gt; what stops a bad answer after generation and before display? If nothing does, your users are your output filter.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Tracing: can you see what happened?
&lt;/h2&gt;

&lt;p&gt;LLM systems are probabilistic. The same question can produce different answers, and failures rarely repeat on demand. Without traces, a user complaint turns into guesswork. You do not know what the request was, what context the model received, or which step went wrong.&lt;/p&gt;

&lt;p&gt;A trace collector records the path each request took. Pair it with metrics for latency, errors, and cost, and debugging becomes reading instead of guessing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The test:&lt;/strong&gt; pick an answer a user complained about yesterday. Can you see the exact input, context, and output that produced it?&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Evaluation: how do you know it is still good?
&lt;/h2&gt;

&lt;p&gt;Prompts change. Models get upgraded. Documents get added. Any of those can quietly make answers worse, and without evaluation you find out from users. An eval engine scores outputs for factuality, groundedness, and safety, so a regression shows up as a number before it shows up as a complaint.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The test:&lt;/strong&gt; if you changed the prompt today, how would you know whether the answers got better or worse?&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Fairness checks: is it worse for some users?
&lt;/h2&gt;

&lt;p&gt;Average quality can look fine while one group of users gets worse answers every day. Different languages, regions, or customer types can hit the model differently, and nobody notices because the overall score did not move. A fairness evaluator compares results across groups so those gaps become visible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The test:&lt;/strong&gt; do you measure answer quality by user group, or only on average?&lt;/p&gt;

&lt;h2&gt;
  
  
  Run the checklist on a real architecture
&lt;/h2&gt;

&lt;p&gt;This list is not theory. It is exactly what LLM Architect reports when it evaluates the minimal internal chatbot path: API gateway, LLM worker, response formatter. The demo works. It scores 47 out of 100 and is missing seven controls.&lt;/p&gt;

&lt;p&gt;That is the point. Most of what makes an AI system ready for production is not the model. It is the controls around it.&lt;/p&gt;

&lt;p&gt;Challenge 1 is public and needs no signup. Run the evaluation, see the missing controls, and inspect what each one protects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://llmarchitect.ai/try?utm_source=devto&amp;amp;utm_medium=community&amp;amp;utm_campaign=campaign_sprint_1&amp;amp;utm_content=production_controls_checklist" rel="noopener noreferrer"&gt;Try the public Challenge 1&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Originally published on &lt;a href="https://llmarchitect.ai/blog/llm-demo-production-controls-checklist" rel="noopener noreferrer"&gt;LLM Architect&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>llm</category>
      <category>security</category>
    </item>
  </channel>
</rss>
