<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://sathvik-a1901.github.io/Sathvik-A1901/feed.xml" rel="self" type="application/atom+xml" /><link href="https://sathvik-a1901.github.io/Sathvik-A1901/" rel="alternate" type="text/html" /><updated>2026-02-26T18:36:16+00:00</updated><id>https://sathvik-a1901.github.io/Sathvik-A1901/feed.xml</id><title type="html">Sathvik Addicharla</title><subtitle>AI Engineering | Evaluation-Driven Development | LLM Systems</subtitle><entry><title type="html">Beyond ‘Vibes’: The Definitive Guide to AI Evaluation Systems</title><link href="https://sathvik-a1901.github.io/Sathvik-A1901/2026/02/26/beyond-vibes-ai-evaluation.html" rel="alternate" type="text/html" title="Beyond ‘Vibes’: The Definitive Guide to AI Evaluation Systems" /><published>2026-02-26T00:00:00+00:00</published><updated>2026-02-26T00:00:00+00:00</updated><id>https://sathvik-a1901.github.io/Sathvik-A1901/2026/02/26/beyond-vibes-ai-evaluation</id><content type="html" xml:base="https://sathvik-a1901.github.io/Sathvik-A1901/2026/02/26/beyond-vibes-ai-evaluation.html"><![CDATA[<hr />

<h2 id="if-youre-building-ai-products-today">If You’re Building AI Products Today…</h2>

<p>You’ve probably experienced the <strong>“Vibes Phase.”</strong></p>

<p>You build a prototype.<br />
You test a few prompts.<br />
You think:</p>

<blockquote>
  <p>“Wow… that’s actually pretty good.”</p>
</blockquote>

<p>Then you change:</p>
<ul>
  <li>The model</li>
  <li>The prompt</li>
  <li>The RAG documents</li>
  <li>The temperature</li>
</ul>

<p>And suddenly you’re stuck wondering:</p>

<p><strong>Did I improve the system… or did I just break it?</strong></p>

<p>Without a rigorous evaluation system, you are flying blind.</p>

<p>Drawing on insights from Hamel Husain, Jason Liu, Eugene Yan, and research teams at Anthropic, this guide explains how to move from <em>vibes</em> to <strong>Evaluation-Driven Development (EDD).</strong></p>

<hr />

<h1 id="part-1--the-mindset-shift">Part 1 — The Mindset Shift</h1>

<h2 id="ditch-generic-metrics">Ditch Generic Metrics</h2>

<p>Engineers love numbers.</p>

<p>So it’s tempting to rely on:</p>
<ul>
  <li>ROUGE</li>
  <li>BERTScore</li>
  <li>“Helpfulness” ratings</li>
</ul>

<p>But these metrics are a mirage.</p>

<p>They are <strong>painkillers</strong> — they make you feel better, but they don’t solve the problem.</p>

<h3 id="why-they-fail">Why They Fail</h3>

<p>They lack context.</p>

<p>Example:</p>

<p>If a legal AI cites a non-existent case, a generic “coherence” metric might rate it highly because the sentence structure is perfect.</p>

<p>For a lawyer?</p>

<p>That’s a catastrophic failure.</p>

<blockquote>
  <p><strong>The Rule:</strong><br />
Your product has specific constraints.<br />
Your evaluations must measure those constraints — not general capability.</p>
</blockquote>

<hr />

<h2 id="the-core-philosophy-look-at-your-data">The Core Philosophy: Look at Your Data</h2>

<p>The highest ROI activity in AI engineering is not:</p>

<ul>
  <li>Prompt tweaking</li>
  <li>Model switching</li>
  <li>Fine-tuning</li>
</ul>

<p>It’s manually reading your logs.</p>

<p>You must build product intuition by reading:</p>

<ul>
  <li>Inputs</li>
  <li>Retrieval traces</li>
  <li>Outputs</li>
</ul>

<p>You cannot outsource this.</p>

<hr />

<h1 id="part-2--the-error-analysis-workflow">Part 2 — The Error Analysis Workflow</h1>

<p>Borrowed from qualitative research.</p>

<h2 id="1️⃣-open-coding-the-what">1️⃣ Open Coding (The “What”)</h2>

<p>Look at production traces.</p>

<p>Don’t fix them.</p>

<p>Describe what happened.</p>

<p>Example:</p>

<p>User asked for gluten-free recipe.
Model suggested regular soy sauce.</p>

<p>Label:</p>

<blockquote>
  <p>Constraint Violation: Dietary Restriction</p>
</blockquote>

<hr />

<h2 id="2️⃣-axial-coding-build-a-taxonomy">2️⃣ Axial Coding (Build a Taxonomy)</h2>

<p>After reviewing 50–100 logs, patterns emerge.</p>

<p>Group failures into categories:</p>

<ul>
  <li>Hallucination</li>
  <li>Refusal</li>
  <li>Tone Mismatch</li>
  <li>Retrieval Failure</li>
  <li>Constraint Violation</li>
</ul>

<p>Now you have a <strong>Failure Mode Taxonomy</strong>.</p>

<hr />

<h2 id="3️⃣-the-ceiling-on-performance">3️⃣ The Ceiling on Performance</h2>

<p>Take 100 failures.</p>

<p>Count categories.</p>

<p>Example:</p>

<ul>
  <li>50 → Blurry Image Inputs</li>
  <li>5 → Dog misclassified as Cat</li>
</ul>

<p>Fixing the dog problem perfectly improves system by only 5%.</p>

<blockquote>
  <p>Attack the highest-volume failure first.</p>
</blockquote>

<p>This is how you prioritize like an engineer — not emotionally.</p>

<hr />

<h1 id="part-3--metrics-that-matter">Part 3 — Metrics That Matter</h1>

<h2 id="the-5-star-lie">The “5-Star Lie”</h2>

<p>Likert scales introduce noise.</p>

<p>One annotator’s 4 is another annotator’s 3.</p>

<p>Annotators default to 3 to avoid hard decisions.</p>

<p>This creates useless data.</p>

<hr />

<h2 id="the-power-of-binary-passfail">The Power of Binary (Pass/Fail)</h2>

<p>Switch to binary metrics.</p>

<p>Instead of:</p>

<blockquote>
  <p>Rate this recipe 3/5.</p>
</blockquote>

<p>Use:</p>

<ul>
  <li>Dietary Adherence? (Pass/Fail)</li>
  <li>Ingredient Correctness? (Pass/Fail)</li>
  <li>Tone Appropriate? (Pass/Fail)</li>
</ul>

<p>Binary forces clarity.</p>

<p>If you can’t define Pass vs Fail — you don’t understand your product.</p>

<hr />

<h1 id="part-4--evaluation-frameworks">Part 4 — Evaluation Frameworks</h1>

<h2 id="for-rag-systems-the-6-evals">For RAG Systems (The 6 Evals)</h2>

<p>Three variables:</p>

<ul>
  <li>Q → Question</li>
  <li>C → Context</li>
  <li>A → Answer</li>
</ul>

<p>Key relationships:</p>

<h3 id="1️⃣-context-relevance-cq">1️⃣ Context Relevance (C|Q)</h3>
<p>Did retriever fetch relevant data?</p>

<h3 id="2️⃣-faithfulness-ac">2️⃣ Faithfulness (A|C)</h3>
<p>Is answer supported only by retrieved context?</p>

<h3 id="3️⃣-answer-relevance-aq">3️⃣ Answer Relevance (A|Q)</h3>
<p>Did the answer actually address the user’s need?</p>

<p>If C fails, A is doomed.</p>

<hr />

<h2 id="for-ai-agents">For AI Agents</h2>

<p>Agents act. They don’t just respond.</p>

<p>Evaluation must include:</p>

<h3 id="deterministic-checks">Deterministic Checks</h3>
<ul>
  <li>Did code execute?</li>
  <li>Was file saved?</li>
  <li>API call succeed?</li>
</ul>

<h3 id="passk">Pass@k</h3>
<p>If agent tries 10 times, did it succeed at least once?</p>

<h3 id="passk-1">Pass^k</h3>
<p>Did it succeed 10 times in a row?</p>

<p>Reliability &gt; Exploration.</p>

<hr />

<h1 id="part-5--scaling-with-llm-as-a-judge">Part 5 — Scaling with LLM-as-a-Judge</h1>

<p>Manual review works for 100 logs.</p>

<p>Not for 10,000.</p>

<p>Use a strong LLM as a grader.</p>

<p>But treat the judge like a product.</p>

<hr />

<h2 id="the-critique-shadowing-protocol">The Critique Shadowing Protocol</h2>

<ol>
  <li>Domain Expert labels Pass/Fail + critique</li>
  <li>Create Golden Dataset</li>
  <li>Few-shot prompt the Judge with critiques</li>
  <li>Measure agreement rate</li>
</ol>

<p>Do not trust the Judge until:</p>

<blockquote>
  <p>Human–LLM agreement &gt; 90%</p>
</blockquote>

<hr />

<h3 id="️-judge-limitations">⚠️ Judge Limitations</h3>

<p>LLM Judges struggle with:</p>

<ul>
  <li>Sneaky edge cases</li>
  <li>Implicit knowledge</li>
  <li>Predicting user engagement</li>
</ul>

<p>They are scalable — not omniscient.</p>

<hr />

<h1 id="part-6--the-cold-start-problem">Part 6 — The Cold Start Problem</h1>

<p>No users yet?</p>

<p>You still need evaluation.</p>

<h2 id="use-synthetic-data">Use Synthetic Data</h2>

<p>Define:</p>

<ul>
  <li>Personas (Frustrated User, Legal Analyst, Banker)</li>
  <li>Scenarios (Bug report, Compliance question, Retrieval test)</li>
</ul>

<p>Use an LLM to generate test inputs.</p>

<p>Build a:</p>

<blockquote>
  <p>Minimum Viable Evaluation (MVE)</p>
</blockquote>

<p>Every code change should trigger the eval harness.</p>

<hr />

<h1 id="summary--your-evaluation-is-your-moat">Summary — Your Evaluation Is Your Moat</h1>

<p>The moat is not:</p>

<ul>
  <li>The model</li>
  <li>The prompt</li>
  <li>The temperature</li>
</ul>

<p>Everyone has access to the same models.</p>

<p>Your moat is:</p>

<ul>
  <li>Your data</li>
  <li>Your failure taxonomy</li>
  <li>Your binary metrics</li>
  <li>Your eval harness</li>
</ul>

<hr />

<h1 id="the-loop">The Loop</h1>

<ol>
  <li>Log data</li>
  <li>Read traces</li>
  <li>Categorize failures</li>
  <li>Fix system</li>
  <li>Add to eval suite</li>
  <li>Repeat</li>
</ol>

<p>Move from vibes → engineering.</p>

<h1 id="references">References</h1>

<ul>
  <li>https://www.decodingai.com/p/the-5-star-lie-you-are-doing-ai-evals</li>
  <li>https://www.decodingai.com/p/the-mirage-of-generic-ai-metrics</li>
  <li>https://www.youtube.com/watch?v=JoAxZsdw_3w</li>
  <li>https://www.anthropic.com/engineering/demystifying-evals-for-ai-agents</li>
  <li>https://www.youtube.com/watch?v=e2i6JbU2R-s</li>
  <li>https://eugeneyan.com/writing/llm-evaluators/</li>
  <li>https://www.decodingai.com/p/stop-launching-ai-apps-without-this</li>
  <li>https://jxnl.co/writing/2025/05/19/there-are-only-6-rag-evals/</li>
  <li>https://hamel.dev/blog/posts/llm-judge/</li>
  <li>https://www.youtube.com/watch?v=sEMYSSS6Ims</li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry></feed>