Why graph reasoning beats vector search for engineering questions

Vector similarity finds documents that look like your question. The answer usually lives in a chain of artifacts that don’t.
The question that breaks RAG
Take a question we see constantly: “Why does the notification service use polling instead of WebSockets?” Embed it, search your corpus, and you'll retrieve the polling implementation, a README that mentions polling, maybe a config file. All similar to the query. All useless for answering why.
The actual answer is distributed across four artifacts: a Slack thread where infra flagged that a corporate proxy drops WebSocket connections after 30 seconds, a design review that eliminated SSE because the load balancer lacked HTTP/2 streaming, the Jira ticket that scoped the fallback, and the PR that shipped it. Not one of those documents is semantically similar to the question. Cosine similarity can't find them, because similarity isn't the relationship that matters — causation is.
What a reasoning graph does instead
A reasoning graph stores those artifacts as typed nodes — threads, decisions, tickets, PRs, people — connected by edges that mean something: decided-in, scoped-by, implemented-by, authored-by. Answering “why” becomes a traversal: start at the code, walk backward along the edges, and return the chain with citations. The retrieval is structural, so the answer carries provenance by construction — every hop is a source you can open.
This is also what makes the graph reusable. The same edges that answer a lineage question power shared agent memory (a learning committed by one agent is a node any agent can reach) and knowledge retention (a departed engineer's decisions remain connected to the systems they shaped).
Where vectors still win
Honesty matters here: vector search is the right tool for fuzzy recall. “That doc about retry behavior somewhere” is a similarity problem, and embeddings solve it well. That's why Virgo's first retrieval layer is hybrid — vector search to find entry points into the graph, traversal to reconstruct the context around them. The argument isn't vectors versus graphs; it's that similarity alone stops at “what” and never reaches “why.”
The shape of the difference
We're preparing a reproducible benchmark suite comparing hybrid graph retrieval against vanilla RAG on multi-hop engineering questions — the numbers and methodology will get their own post. The qualitative difference is visible in a single query: RAG returns the polling code; the graph returns the proxy constraint, the rejected alternative, the ticket tracking the revisit, and the names of the people who decided. One of those answers prevents a three-week rewrite that would have failed in production for 40% of enterprise clients.