<?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: Ashish Nadar</title>
    <description>The latest articles on DEV Community by Ashish Nadar (@ashish_nadar).</description>
    <link>https://dev.to/ashish_nadar</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%2F3834591%2Fe36e8fb1-13c4-4fb0-9b1f-521743726976.png</url>
      <title>DEV Community: Ashish Nadar</title>
      <link>https://dev.to/ashish_nadar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ashish_nadar"/>
    <language>en</language>
    <item>
      <title>I Gave My AI Every Answer. It Still Said It Knew Nothing.</title>
      <dc:creator>Ashish Nadar</dc:creator>
      <pubDate>Thu, 09 Jul 2026 10:39:12 +0000</pubDate>
      <link>https://dev.to/ashish_nadar/i-gave-my-ai-every-answer-it-still-said-it-knew-nothing-30o7</link>
      <guid>https://dev.to/ashish_nadar/i-gave-my-ai-every-answer-it-still-said-it-knew-nothing-30o7</guid>
      <description>&lt;p&gt;&lt;em&gt;Building a private AI that runs entirely on your own machine — and the one quiet setting that stood between it and working&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;By Ashish Nadar — Scholar in AI-Enabled Software&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;The document was right there.&lt;/p&gt;

&lt;p&gt;I had spent the better part of an hour preparing it — every fact about the company, cleanly written, uploaded, connected. Then I asked my new AI assistant the simplest question I could think of.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"Where is the company headquartered?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;It paused. And then, politely and with complete confidence, it told me it had no idea what company I was talking about.&lt;/p&gt;

&lt;p&gt;I sat with that for a second. The answer was &lt;em&gt;in the file I had just handed it.&lt;/em&gt; It wasn't missing information. It was looking straight past information it already had.&lt;/p&gt;

&lt;p&gt;That moment is where this story actually lives. Not in the setup — the setup was easy. In the gap between a system that looks like it works and one that actually does.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I Wanted an AI That Never Leaves Home
&lt;/h2&gt;

&lt;p&gt;Start with the discomfort, because that's where the idea came from.&lt;/p&gt;

&lt;p&gt;Every time I used a cloud AI tool for something even slightly sensitive, the same question surfaced: &lt;em&gt;where is this data going?&lt;/em&gt; With most tools, the honest answer is — somewhere else. Your words leave your machine, travel to a server you'll never see, and come back.&lt;/p&gt;

&lt;p&gt;For casual questions, fine. For anything private, that quiet trip is the whole problem.&lt;/p&gt;

&lt;p&gt;So I set a constraint that turned into a project: what if the AI never left my machine at all? The model, the data, every conversation — all in one place. Mine.&lt;/p&gt;

&lt;p&gt;Not a smaller version of a cloud tool. A genuinely private one, because nothing about it ever goes online.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F56y3q0v86ob3oop43l8e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F56y3q0v86ob3oop43l8e.png" alt=" " width="799" height="586"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;With cloud AI, your data makes a round trip you never see. With local AI, nothing leaves the machine — ever.&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  The Setup Was the Easy Part
&lt;/h2&gt;

&lt;p&gt;Here's what surprised me most: you need very little.&lt;/p&gt;

&lt;p&gt;An engine to run the model on your own hardware. An open-source model — a free, downloadable brain. A short set of instructions to give it an identity. And your own documents, so it answers from your world instead of guessing.&lt;/p&gt;

&lt;p&gt;Four pieces. Within an afternoon I had a generic AI running locally, offline, answering questions without a single byte leaving the machine.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdzetk92nw85qd0jpoowr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fdzetk92nw85qd0jpoowr.png" alt=" " width="799" height="586"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Four components. One afternoon. A private AI running entirely on your own machine — runtime, model, identity and your documents.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That part felt like magic. The next part felt like a wall.&lt;/p&gt;


&lt;h2&gt;
  
  
  Where Confidence Turns Into a Blind Spot
&lt;/h2&gt;

&lt;p&gt;An out-of-the-box model is a generalist. It knows a little about everything and nothing about you.&lt;/p&gt;

&lt;p&gt;So I gave it a name, a role, a professional voice — and one rule I cared about most: never pretend to know things it doesn't. On that, it delivered. When I later asked for a price that appeared in none of my files, it didn't invent a number. It admitted the gap and pointed to who to ask.&lt;/p&gt;

&lt;p&gt;That honesty mattered. An AI that confidently makes things up is worse than no AI at all.&lt;/p&gt;

&lt;p&gt;But there was still the small matter of it insisting my company didn't exist.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Bug That Nearly Beat Me
&lt;/h2&gt;

&lt;p&gt;This is the part the tutorials quietly skip. So I won't.&lt;/p&gt;

&lt;p&gt;Everything was configured. Document uploaded. Connected. Settings correct. And still —&lt;/p&gt;

&lt;p&gt;&lt;em&gt;"I don't have information about that company."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Then I noticed something maddening. When I attached the document &lt;em&gt;by hand&lt;/em&gt;, for that one question, the answer was flawless — correct facts, a source citation, exactly right. But the moment I relied on the automatic path? Nothing. Same document. Same question. Two different worlds depending on how the file arrived.&lt;/p&gt;

&lt;p&gt;I went in circles. Rewrote the instructions. Swapped in a bigger, smarter model. Flipped every setting I could find. The manual way worked; the automatic way refused, every time.&lt;/p&gt;

&lt;p&gt;The cause, when I finally found it, was almost poetic.&lt;/p&gt;

&lt;p&gt;The system was built to make the AI &lt;em&gt;reach out and fetch&lt;/em&gt; the document itself — like handing someone a library card instead of the book. A large model knows to go use that card. The smaller one I was running just sat there holding it, never walking to the shelf. So it answered from memory — and about my company, its memory was blank.&lt;/p&gt;

&lt;p&gt;The fix was to stop handing it a card and start handing it the book. Put the whole document in front of it, every time. No fetching required.&lt;/p&gt;

&lt;p&gt;One setting. I changed it, asked again, and the answer came back correct — automatically, with its source attached. I celebrated more than a grown professional probably should.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0gqeyb192dyhsy6pfb7b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0gqeyb192dyhsy6pfb7b.png" alt=" " width="799" height="586"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;Same document. Same question. Two completely different results — depending on whether the model was handed the book or just a library card.&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  How I Actually Built It
&lt;/h2&gt;

&lt;p&gt;Since this is the part fellow builders will want, here's the concrete stack — all of it open-source and free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The runtime: Ollama.&lt;/strong&gt;&lt;br&gt;
It downloads and runs open models locally with a single command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull llama3.1:8b
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You're running a model on your own hardware, offline. It exposes a local API that everything else talks to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The model: an open-weight Llama.&lt;/strong&gt;&lt;br&gt;
I ran a small one first (3B), which was fast but flaky at harder tasks, then moved to an 8B for more reliable behavior. On a CPU-only laptop, expect slower responses at the larger size — a real tradeoff.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The interface: Open WebUI.&lt;/strong&gt;&lt;br&gt;
A self-hosted, ChatGPT-style web UI that connects to Ollama automatically. Run it in Docker:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:8080 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--add-host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;host.docker.internal:host-gateway &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-v&lt;/span&gt; open-webui:/app/backend/data &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--name&lt;/span&gt; open-webui &lt;span class="se"&gt;\&lt;/span&gt;
  ghcr.io/open-webui/open-webui:main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is also where you give the model an identity (a system prompt) and where the retrieval lives.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The knowledge: built-in RAG.&lt;/strong&gt;&lt;br&gt;
Open WebUI lets you create a "Knowledge" collection, upload documents, and attach it to your model. It handles the embedding and retrieval — I used the &lt;code&gt;nomic-embed-text&lt;/code&gt; embedding model, also served through Ollama, so nothing left the machine:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull nomic-embed-text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The bug — and the actual fix.&lt;/strong&gt;&lt;br&gt;
Retrieval worked when I attached the collection manually in chat (via &lt;code&gt;#&lt;/code&gt;), but not when it was attached at the model level.&lt;/p&gt;

&lt;p&gt;The cause: &lt;strong&gt;native function calling&lt;/strong&gt;. In that mode, the model is expected to &lt;em&gt;call a retrieval tool&lt;/em&gt; to fetch the document — and small local models call tools unreliably, so it never fired and answered ungrounded.&lt;/p&gt;

&lt;p&gt;The fix was one toggle:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;On the knowledge attachment, switch from &lt;strong&gt;Focused Retrieval&lt;/strong&gt; to &lt;strong&gt;"Use Entire Document."&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That injects the full document into context every message instead of relying on a tool call. For a small document it's ideal — and it sidesteps the tool-calling problem entirely.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; For large corpora you'd instead disable native function calling and keep focused retrieval, since injecting everything won't scale.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That single setting was the difference between &lt;em&gt;"I don't know that company"&lt;/em&gt; and a correct, cited answer — automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  What the Gap Was Really Made Of
&lt;/h2&gt;

&lt;p&gt;None of this was a failure of the model, or the documents, or the idea. Every piece was right.&lt;/p&gt;

&lt;p&gt;The gap was one layer of behavior — a system expecting a small model to do something small models don't reliably do. The whole thing worked the instant I stopped asking it to reach, and simply gave it what it needed up front.&lt;/p&gt;

&lt;p&gt;That's the pattern worth keeping. The failure wasn't in &lt;em&gt;what&lt;/em&gt; the system knew. It was in &lt;em&gt;how&lt;/em&gt; it was asked to reach for it.&lt;/p&gt;

&lt;p&gt;And two things turned out to matter more than raw capability: whether the assistant is honest about what it doesn't know, and whether it's actually handed what it does. Get those two right and a modest machine running open tools becomes something you'd genuinely trust.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Question Worth Sitting With
&lt;/h2&gt;

&lt;p&gt;The next time you build something that looks finished — configured, connected, green across the board — before you call it done, ask the simplest question you can and watch what it actually does.&lt;/p&gt;

&lt;p&gt;Because the distance between &lt;em&gt;"this should work"&lt;/em&gt; and &lt;em&gt;"this works"&lt;/em&gt; isn't usually a broken part.&lt;/p&gt;

&lt;p&gt;It's one quiet assumption nobody thought to check.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Ashish Nadar is a Scholar in Secure Cloud, Operational Excellence, and AI-Enabled Software, researching how AI tooling reshapes the way systems are built, secured, and trusted.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Portfolio → &lt;a href="https://www.ashishnadar.com" rel="noopener noreferrer"&gt;ashishnadar.com&lt;/a&gt;&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Read more on Medium → &lt;a href="https://medium.com/@ashish-nadar" rel="noopener noreferrer"&gt;medium.com/@ashish.w.nadar&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>privacy</category>
      <category>machinelearning</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Closing the Gap Between SCA Tools and Runtime Reality — Ashish Nadar</title>
      <dc:creator>Ashish Nadar</dc:creator>
      <pubDate>Fri, 10 Apr 2026 09:30:00 +0000</pubDate>
      <link>https://dev.to/ashish_nadar/closing-the-gap-between-sca-tools-and-runtime-reality-ashish-nadar-41g7</link>
      <guid>https://dev.to/ashish_nadar/closing-the-gap-between-sca-tools-and-runtime-reality-ashish-nadar-41g7</guid>
      <description>&lt;p&gt;The alert came in on a Tuesday morning.&lt;/p&gt;

&lt;p&gt;A critical CVE. Severity score 9.8. Affecting one of the most widely used&lt;br&gt;
open-source libraries in the Node.js ecosystem.&lt;/p&gt;

&lt;p&gt;Our team had Snyk. We had Wiz. We had automated scanning pipelines and&lt;br&gt;
weekly vulnerability reports. By most measures, we were well-equipped.&lt;/p&gt;

&lt;p&gt;So when the question landed in the security channel —&lt;br&gt;
&lt;em&gt;"Where are we actually exposed in production right now?"&lt;/em&gt; —&lt;br&gt;
we assumed the answer would take minutes.&lt;/p&gt;

&lt;p&gt;It took most of the day.&lt;/p&gt;

&lt;p&gt;That gap — between the tooling we had and the confidence we needed —&lt;br&gt;
is exactly what this article is about.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Core Problem
&lt;/h2&gt;

&lt;p&gt;SCA tools like Snyk and Wiz are excellent at what they do.&lt;br&gt;
They continuously scan repositories and flag vulnerable dependencies.&lt;/p&gt;

&lt;p&gt;But they scan &lt;strong&gt;source code&lt;/strong&gt;. Not production.&lt;/p&gt;

&lt;p&gt;And in any sufficiently complex environment, those two things&lt;br&gt;
can look very different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployments routinely lag behind the latest commit&lt;/li&gt;
&lt;li&gt;Dev dependencies appear in source but never reach runtime&lt;/li&gt;
&lt;li&gt;Inactive repos still show up in scans — inflating apparent exposure&lt;/li&gt;
&lt;li&gt;Different environments run different versions of the same service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The result? When a critical CVE drops, your SCA tool gives you&lt;br&gt;
a list of repositories where the vulnerable library &lt;em&gt;might&lt;/em&gt; exist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What it cannot tell you is whether that library is actually deployed.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The Fix: A Runtime-First Approach
&lt;/h2&gt;

&lt;p&gt;The most reliable source of truth isn't your source repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It's the code actually running in production.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For AWS Lambda, this is surprisingly practical. Lambda functions&lt;br&gt;
contain their packaged dependencies — the actual &lt;code&gt;node_modules&lt;/code&gt;&lt;br&gt;
bundled at deployment time. Inspecting these directly gives you&lt;br&gt;
immediate, high-confidence answers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which functions are affected?&lt;/li&gt;
&lt;li&gt;Which version is running?&lt;/li&gt;
&lt;li&gt;Which environment?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No cross-team coordination. No waiting. No uncertainty.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's in the Full Article
&lt;/h2&gt;

&lt;p&gt;The complete research article covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📖 The real incident that revealed this gap&lt;/li&gt;
&lt;li&gt;🔍 Why team-based verification fails under pressure&lt;/li&gt;
&lt;li&gt;🧪 A practical runtime inspection workflow for AWS Lambda&lt;/li&gt;
&lt;li&gt;🔄 How this pattern extends to containers and EC2&lt;/li&gt;
&lt;li&gt;🏗️ Building this as a permanent MCP-powered capability&lt;/li&gt;
&lt;li&gt;📊 How SCA and runtime inspection work together&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Read the Full Article
&lt;/h2&gt;

&lt;p&gt;This is a glimpse. The complete article — with detailed workflows,&lt;br&gt;
diagrams, and implementation patterns — is published on Medium.&lt;/p&gt;

&lt;h3&gt;
  
  
  👉 &lt;a href="https://medium.com/@ashish-nadar/ashish-nadar-scholar-sca-tools-runtime-reality-f6c094a62619" rel="noopener noreferrer"&gt;Read the full article here&lt;/a&gt;
&lt;/h3&gt;

</description>
      <category>security</category>
      <category>devops</category>
      <category>cloud</category>
      <category>programming</category>
    </item>
    <item>
      <title>The Day a Green Pipeline Told Me Everything Was Fine — And It Wasn't</title>
      <dc:creator>Ashish Nadar</dc:creator>
      <pubDate>Fri, 20 Mar 2026 08:30:00 +0000</pubDate>
      <link>https://dev.to/ashish_nadar/the-day-a-green-pipeline-told-me-everything-was-fine-and-it-wasnt-336</link>
      <guid>https://dev.to/ashish_nadar/the-day-a-green-pipeline-told-me-everything-was-fine-and-it-wasnt-336</guid>
      <description>&lt;p&gt;&lt;em&gt;By Ashish Nadar — Scholar in Secure Cloud · Operational Excellence · AI-Enabled Software&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;There's a moment every researcher dreads — not the moment when something breaks loudly and obviously, but the moment when everything appears to be working perfectly, and you have a quiet, creeping feeling that it isn't.&lt;/p&gt;

&lt;p&gt;I had that moment midway through one of my research projects on AI-assisted backend development.&lt;/p&gt;

&lt;p&gt;The pipeline was green. The tests were passing. The code was clean and well-structured. By every standard metric, the system looked healthy.&lt;/p&gt;

&lt;p&gt;But something had shifted. Silently.&lt;/p&gt;

&lt;p&gt;Underneath all those green checkmarks, a fallback path that should have triggered under a specific failure condition had quietly stopped working. Nobody was careless. The AI-generated code was genuinely good. And yet the system was misbehaving in a way none of our internal tests had caught.&lt;/p&gt;

&lt;p&gt;That incident led me to one of the most important questions I've explored in my research:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;In a world where AI can build and test a system in the same breath — what does independent validation even mean?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  The Problem: Behavioral Drift
&lt;/h2&gt;

&lt;p&gt;When AI generates your backend logic &lt;strong&gt;and&lt;/strong&gt; updates your tests in the same workflow, something subtle and dangerous happens.&lt;/p&gt;

&lt;p&gt;The system changes. The tests are updated to validate the new behavior. The pipeline reports green. And nobody notices that the "new behavior" being validated is actually &lt;strong&gt;incorrect&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I call this &lt;strong&gt;behavioral drift&lt;/strong&gt; — and it's one of the most invisible failure modes in modern AI-assisted development.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ziyzlax81l3m5xq5185.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ziyzlax81l3m5xq5185.png" alt="When AI modifies logic and tests in the same pass, the pipeline stays green — but the system quietly gets it wrong." width="800" height="660"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The scariest part? The code looks cleaner after the AI refactor. Better structured. More readable. And yet the system is quietly doing the wrong thing.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Fix: An Independent Validation Layer
&lt;/h2&gt;

&lt;p&gt;The solution isn't better internal tests. It's putting the tests &lt;strong&gt;outside the system boundary entirely&lt;/strong&gt; — a layer that AI-assisted development fundamentally cannot corrupt.&lt;/p&gt;

&lt;p&gt;External automation tests interact with your backend the way a real client would. They don't care how the code is structured inside. They only ask one question:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does the system still behave correctly?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This creates a clean divide between two things that should never be tightly coupled — &lt;strong&gt;system implementation&lt;/strong&gt; and &lt;strong&gt;system validation&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Inside the Full Article
&lt;/h2&gt;

&lt;p&gt;In the complete research article I cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;📖 A real-world case study of behavioral drift in a production backend&lt;/li&gt;
&lt;li&gt;🔍 Why conditional failures are the hardest to catch and the most costly&lt;/li&gt;
&lt;li&gt;🧪 The 4 layers of external automation testing every complex backend needs&lt;/li&gt;
&lt;li&gt;👥 How external automation improves team confidence and collaboration&lt;/li&gt;
&lt;li&gt;🗺️ A practical 6-step blueprint to build your own independent validation layer&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Read the Full Article on Medium
&lt;/h2&gt;

&lt;p&gt;This post is a glimpse. The full research article — with detailed case studies, diagrams, and a complete implementation blueprint — is published on Medium.&lt;/p&gt;

&lt;h3&gt;
  
  
  👉 &lt;a href="https://medium.com/@ashish.w.nadar/ai-backend-behavioral-drift-external-automation-testing-0e656bfc6410" rel="noopener noreferrer"&gt;Read the full article here&lt;/a&gt;
&lt;/h3&gt;




&lt;p&gt;&lt;em&gt;Ashish Nadar is a Scholar in Secure Cloud, Operational Excellence, and AI-Enabled Software researching how AI tooling reshapes the way backend systems are built, tested, and maintained.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Portfolio → &lt;a href="https://www.ashishnadar.com" rel="noopener noreferrer"&gt;ashishnadar.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>testing</category>
      <category>backend</category>
    </item>
  </channel>
</rss>
