<?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: Rubab Zahra</title>
    <description>The latest articles on DEV Community by Rubab Zahra (@rubab_zahra_9260).</description>
    <link>https://dev.to/rubab_zahra_9260</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%2F4009095%2F3a92bb87-6ccc-42dc-b9c7-d21fc6906c1e.png</url>
      <title>DEV Community: Rubab Zahra</title>
      <link>https://dev.to/rubab_zahra_9260</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rubab_zahra_9260"/>
    <language>en</language>
    <item>
      <title>Your AI Gives Confident Wrong Answers Because Your Docs Are a Mess — Not Because the Model Is Bad</title>
      <dc:creator>Rubab Zahra</dc:creator>
      <pubDate>Wed, 08 Jul 2026 14:05:35 +0000</pubDate>
      <link>https://dev.to/rubab_zahra_9260/your-ai-gives-confident-wrong-answers-because-your-docs-are-a-mess-not-because-the-model-is-bad-57n9</link>
      <guid>https://dev.to/rubab_zahra_9260/your-ai-gives-confident-wrong-answers-because-your-docs-are-a-mess-not-because-the-model-is-bad-57n9</guid>
      <description>&lt;p&gt;There is a specific kind of frustration that comes from asking an AI a question about your own project and getting an answer that is confidently, plausibly, completely wrong.&lt;br&gt;
Not hallucination in the traditional sense; it is not making things up out of thin air. It is retrieving something real from your documentation and presenting it as current, even though it was superseded three sprints ago. &lt;br&gt;
It is blending two contradictory sources because both matched the query semantically. It is telling you the payment module has five known issues when there are actually nine, because three of them only exist in a Slack thread the retrieval system never indexed. Most teams blame the model. The model is rarely the problem.&lt;br&gt;
The Real Failure Point in RAG Pipelines&lt;br&gt;
Retrieval-Augmented Generation works, in theory, by pulling relevant documents from your knowledge base and using them as context for the language model's response. The model's job is to synthesise and present. The retrieval system's job is to find the right sources.&lt;br&gt;
The failure almost always happens at the retrieval layer, and more specifically, at the data layer underneath retrieval. Here is what most "AI over your docs" implementations look like in practice:&lt;br&gt;
Documents dumped into vector DB&lt;br&gt;
↓&lt;br&gt;
Embeddings generated&lt;br&gt;
↓&lt;br&gt;
Query comes in&lt;br&gt;
↓&lt;br&gt;
Similarity search returns top-k chunks&lt;br&gt;
↓&lt;br&gt;
LLM synthesises response&lt;br&gt;
This works fine for a static, well-curated knowledge base. It breaks down badly for the actual documentation reality of most engineering teams, which looks more like this:&lt;br&gt;
A requirements doc written in week 1 that was partially updated in week 4 and never finalised&lt;br&gt;
A troubleshooting PDF from a vendor that predates the current integration version&lt;br&gt;
Jira tickets where the resolution is in a comment thread, not the ticket description&lt;br&gt;
Slack threads where the actual decision was made but never written down anywhere official&lt;br&gt;
A wiki page that three people edited in conflicting directions and nobody owns&lt;br&gt;
A similarity search has no concept of which of these is current. It finds what is semantically relevant. Relevance and recency are completely different things, and naive RAG treats them as the same thing.&lt;br&gt;
The Three Structural Problems&lt;br&gt;
Problem 1 — No Source Hierarchy&lt;br&gt;
Most RAG implementations treat all sources as equal. A decision made in a Slack thread last week has the same retrieval weight as a requirements document written six months ago, if both match the query embedding.&lt;br&gt;
This is fine when sources are consistent. It produces confident wrong answers when they contradict each other, which, in active engineering projects, they frequently do.&lt;br&gt;
The fix is not a better embedding model. It is source metadata that the retrieval system can actually use: timestamps, document type, status (draft / approved/superseded), and explicit supersession relationships between documents. &lt;br&gt;
A requirements doc marked "superseded by REQ-v2" should not be retrieved as a current source. But if that metadata does not exist in your data layer, the retrieval system has no way to know.&lt;br&gt;
Problem 2 — Chunk Boundaries Break Context&lt;br&gt;
Standard RAG implementations split documents into chunks for embedding, typically 500 to 1000 tokens. The assumption is that relevant information clusters within those boundaries.&lt;br&gt;
For technical documentation, this assumption fails regularly. A requirement might be stated in paragraph two, qualified in paragraph five, and have a critical exception noted in a comment thread that was never incorporated into the document itself. A chunk-based retrieval system picks up paragraph two, misses paragraph five entirely, and has no idea the comment thread exists.&lt;br&gt;
The result is an answer that is technically grounded in a real source and substantively incomplete in a way that matters for the actual decision being made.&lt;br&gt;
Problem 3 — No Relationship Graph Between Entities&lt;br&gt;
This is the deepest structural problem and the one that is hardest to retrofit. In a well-structured engineering knowledge base, entities have relationships: a requirement links to the tickets that implement it, which link to the test cases that verify it, which link to the bugs that were found during testing, which link back to the requirement if the bug revealed a spec gap. &lt;br&gt;
These relationships are the context that makes an answer actually useful. Most doc-over-AI implementations treat documents as independent artifacts. They retrieve based on semantic similarity to the query, not based on traversing the relationship graph between relevant entities.&lt;br&gt;
So when you ask "what are the known issues in the payments module," you get whatever documents mention "payments" and "issues" in proximity, not a traversal of all tickets, bugs, test failures, and requirement gaps that relate to that module.&lt;br&gt;
What Actually Fixes It&lt;br&gt;
The answer is not a better model or a more sophisticated retrieval algorithm, though both help at the margins. The answer is fixing the data structure before the AI ever touches it.&lt;br&gt;
Concretely, that means three things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Explicit status and recency metadata on every source. 
Every document, ticket, and thread needs machine-readable status: current, draft, superseded, resolved, open. This is boring to implement and has nothing to do with AI; it is just good data hygiene that most teams skip because it requires discipline to maintain. Without it, your retrieval system is operating blind on the most important dimension of document quality.&lt;/li&gt;
&lt;li&gt;Supersession relationships tracked explicitly. 
When a new requirements doc replaces an old one, that relationship should exist in the data layer, not just be inferable from timestamps. When a Jira ticket's resolution contradicts the original description, the resolution should be the canonical source, not a comment with equal weight to everything else.&lt;/li&gt;
&lt;li&gt;Entity relationships as first-class data. 
Requirements link to tickets. Tickets link to test cases. Test cases link to bugs. Bugs link back to requirements. If these relationships exist in your tooling, a well-designed retrieval system can traverse them rather than doing flat similarity search. The answer to "known issues in the payments module" becomes a graph traversal, not a keyword hunt.
The Tool Layer Problem
Here is the uncomfortable part: most teams cannot implement this properly because their knowledge lives across four or five tools with no common schema and no shared relationship layer.
Requirements are in Confluence. Tickets are in Jira. Test cases are in TestRail. Bugs have their own workflow. The relationships between them exist in someone's head and in informal cross-tool links that were never designed to be machine-readable.
When you try to build "AI over your docs" on top of this structure, you are not building a knowledge system. You are building a similarity search over a pile of disconnected artifacts and hoping the model is smart enough to compensate for the missing structure. It is not. It is confidence, and confidence is not the same as correctness.
We ran into this while building the knowledge and Q&amp;amp;A layer for Everia,  the tool we work on day to day. The insight that changed how we thought about it was that the AI's job should be retrieval and citation from structured data, not inference over unstructured data. 
Once requirements, tickets, test cases, and docs all lived in one schema with explicit relationships between them, the question "what are the known issues in the payments module" became a structured query with a verifiable answer, not a retrieval gamble.
Not every team is going to rebuild their tooling stack to fix their RAG implementation. But the principle applies at whatever layer you can act on it: the more structure you can add to your data before it hits the retrieval system- explicit status, supersession relationships, entity links- the less work you are asking the model to do, and the less often it will do that work confidently wrong.
The Quick Audit
If you are running or evaluating an "AI over your docs" setup, these four questions will tell you most of what you need to know:&lt;/li&gt;
&lt;li&gt;Does your retrieval system know which sources are current versus superseded? If the answer is "it can probably infer from timestamps," that is a no.&lt;/li&gt;
&lt;li&gt;Can your system distinguish between a document's original content and its amendments? Requirements change. Tickets get updated. If the AI is retrieving the original version of a document that has been materially changed, it is working from stale ground truth.&lt;/li&gt;
&lt;li&gt;Are entity relationships traversable or just inferable? If the link between a requirement and its test cases exists only as a cross-tool URL someone pasted into a comment, it is not traversable. It might as well not exist from the retrieval system's perspective.&lt;/li&gt;
&lt;li&gt;Can every answer be traced back to a specific source with a specific status? If your AI cannot cite the exact document and version it is drawing from, you cannot verify whether the answer is current. Confidence without citation is not a knowledge system — it is a very convincing guess.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Curious how others have approached the source recency and supersession problem specifically — it feels like the least-discussed failure mode in RAG implementations but consistently the most expensive one in practice. What have you found that actually works?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>rag</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Why "Just Ask the AI" Doesn't Work When Your Docs Are Scattered Across 6 Tools</title>
      <dc:creator>Rubab Zahra</dc:creator>
      <pubDate>Tue, 30 Jun 2026 07:53:31 +0000</pubDate>
      <link>https://dev.to/rubab_zahra_9260/why-just-ask-the-ai-doesnt-work-when-your-docs-are-scattered-across-6-tools-h2e</link>
      <guid>https://dev.to/rubab_zahra_9260/why-just-ask-the-ai-doesnt-work-when-your-docs-are-scattered-across-6-tools-h2e</guid>
      <description>&lt;p&gt;A teammate asked a simple question last sprint: "What are all the known issues in the payments module?"&lt;/p&gt;

&lt;p&gt;Should've been a 30-second answer. Instead, it turned into a 45-minute archaeology dig, a Word doc called "Payments - Known Issues," a troubleshooting PDF from the payment provider, an integration guide, a handful of Jira tickets, and two separate Slack threads where the actual root causes were discussed but never written down anywhere official.&lt;/p&gt;

&lt;p&gt;By the end, we thought we had the full picture. We weren't actually sure.&lt;/p&gt;

&lt;p&gt;The "just plug in an LLM" trap.The obvious reaction here is "just connect ChatGPT to your docs." A lot of teams do exactly this, wire up a vector DB, dump every doc into it, and call it done.&lt;/p&gt;

&lt;p&gt;It works, until it doesn't, for a specific reason: most LLM-over-docs setups have no concept of source reliability or recency. If your "Known Issues" doc says something was fixed, but a Jira ticket from yesterday reopened it, a naive RAG setup will happily blend both into a confident-sounding answer that's wrong. It doesn't know one source is stale.&lt;/p&gt;

&lt;p&gt;The second problem is scope. A generic LLM plugin bolted onto your docs folder doesn't know what a "module" is in your codebase, doesn't know which tickets are linked to which requirement, and doesn't know that a Slack thread from three weeks ago superseded the PDF from the vendor. It just does a similarity search and hopes for the best.&lt;/p&gt;

&lt;p&gt;What actually closed the gap for us&lt;/p&gt;

&lt;p&gt;The fix wasn't a smarter model. It was making the underlying data structured before the AI ever touches it, so the AI's job becomes retrieval and citation, not guessing.&lt;/p&gt;

&lt;p&gt;Concretely, that means: Every doc, ticket, and test case lives in one schema, not six separate tools with six separate APIs&lt;br&gt;
Tickets are explicitly linked to the requirements and components they affect, not just tagged with free-text labels&lt;br&gt;
When a doc gets superseded by a newer source (a fixed ticket, an updated integration guide), that relationship is tracked, not left for the AI to infer from timestamps alone&lt;br&gt;
Every answer the AI gives links back to the exact source paragraph or ticket it pulled from, so you can verify it in one click instead of trusting it blindly&lt;/p&gt;

&lt;p&gt;We ended up building this into &lt;a href="https://www.everia.io/" rel="noopener noreferrer"&gt;Everia&lt;/a&gt; (the project tool we use day-to-day) because it was easier to fix at the data layer than to keep tuning prompts across six fragmented sources. Asking "what are the known issues in the payments module" now pulls together docs, tickets, and Slack threads, returns a cited list, and takes about 8 seconds instead of 45 minutes.&lt;/p&gt;

&lt;p&gt;The general lesson, tool-agnostic. Most teams skip straight to the model and wonder later why the answers are confidently wrong half the time. If your engineering velocity is constantly taking a backseat to administrative tool configuration, it's a sign your underlying environment needs &lt;a href="https://www.everia.io/blog/beyond-the-fixed-spreadsheet-the-guide-to-agile-budgeting-for-high-velocity-teams" rel="noopener noreferrer"&gt;structural consolidation over superficial plugins&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you're building or evaluating any "ask your docs" feature, the question worth asking isn't "which LLM is best at this." It's: does the underlying data know what's current, what's superseded, and where each fact actually lives?&lt;/p&gt;

&lt;p&gt;An LLM is only as trustworthy as the structure underneath it. Most teams skip straight to the model and wonder later why the answers are confidently wrong half the time.&lt;/p&gt;

&lt;p&gt;Curious if others have solved the "stale source vs. current source" problem differently: versioning docs explicitly, tagging deprecated content, something else? What's worked for your team?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>llm</category>
    </item>
  </channel>
</rss>
