<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Daniel Ostrovsky — Blog</title>
        <link>https://danduh.me/blog</link>
        <description>Essays on AI architecture, agents, and production AI by Daniel Ostrovsky.</description>
        <lastBuildDate>Mon, 05 Jan 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>Copyright © 2026 Daniel Ostrovsky.</copyright>
        <item>
            <title><![CDATA[AI Is Building Code Nobody Can Maintain. You're Next.]]></title>
            <link>https://danduh.me/blog/ai-amnesia-graphrag</link>
            <guid>https://danduh.me/blog/ai-amnesia-graphrag</guid>
            <pubDate>Mon, 05 Jan 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Organizations ship code faster than ever — and forget faster than ever. How a GraphRAG-backed knowledge graph gives your org (and your AI agents) real long-term memory.]]></description>
            <content:encoded><![CDATA[<p><img decoding="async" loading="lazy" alt="AI amnesia — a glowing brain wired to PRD, ADR, PR, release, and incident nodes." src="https://danduh.me/assets/images/ai-amnesia-cfbc1089bc00e60f71e7571bd40a1723.webp" width="720" height="488" class="img_ev3q"></p>
<p>Organizations are shipping code faster than ever. They're also forgetting faster than ever. AI agents write features in hours, but six months later, no one can explain why the system looks the way it does. The code works. The tests pass. But the story is gone.</p>
<!-- -->
<!-- -->
<blockquote>
<p><em>Originally published on <a href="https://medium.com/@danduh/ai-is-building-code-nobody-can-maintain-youre-next-141fdbfc0b2b" target="_blank" rel="noopener noreferrer">Medium</a>.</em></p>
</blockquote>
<p>It came up in a weekly review. The VP of Engineering asked a simple question:</p>
<blockquote>
<p>"Who owns <code>billing-orchestrator-service</code>?"</p>
</blockquote>
<p>Silence. People glanced at each other. Someone dug through Jira, then GitHub — and found only commits labeled <code>agent-generated-2024-05-12</code>. Eventually an engineer said it out loud:</p>
<blockquote>
<p>"The AI built most of that."</p>
</blockquote>
<p>The service that moved money in and out of the company didn't have a clear owner, a clear history, or a clear story. It existed. It mostly worked. But no one could explain why it looked the way it did.</p>
<p>That's <strong>AI amnesia</strong>.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="ai-didnt-just-replace-developers--it-replaced-memory">AI Didn't Just Replace Developers — It Replaced Memory<a href="https://danduh.me/blog/ai-amnesia-graphrag#ai-didnt-just-replace-developers--it-replaced-memory" class="hash-link" aria-label="Direct link to AI Didn't Just Replace Developers — It Replaced Memory" title="Direct link to AI Didn't Just Replace Developers — It Replaced Memory">​</a></h2>
<p>From outside, it looks simple: "AI is replacing developers." Up close, it's messier.</p>
<p>Companies lean into automation. AI agents write code. AI handles support. AI makes decisions. The first few months look great. Charts go up, tickets close faster, slides get shinier.</p>
<p><strong>Then reality hits.</strong></p>
<p>Take <strong>Klarna</strong>. They pushed hard into AI customer support. The CEO celebrated replacing people's jobs. Then customers with complex issues got stuck in chatbot loops. Nuance turned into canned answers. Frustration grew.</p>
<p>The story changed fast: "we're making sure you can reach a human." Employees got reassigned back to support.</p>
<p><strong>Google</strong> laid off engineers. Then they needed them back. As the AI race heated up, they rehired "boomerang" employees — people they'd let go — for their knowledge of systems and culture.</p>
<p>There's that viral founder: "I fired my dev team and replaced them with AI." Internet fame followed. Months later, he was hiring developers on LinkedIn.</p>
<p>Call it what you want. The pattern is clear: code without understanding is a time bomb.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="these-organizations-underestimated-human-memory">These Organizations Underestimated Human Memory<a href="https://danduh.me/blog/ai-amnesia-graphrag#these-organizations-underestimated-human-memory" class="hash-link" aria-label="Direct link to These Organizations Underestimated Human Memory" title="Direct link to These Organizations Underestimated Human Memory">​</a></h2>
<p><img decoding="async" loading="lazy" alt="A humanoid agent between a pile of fragmented, agent-generated code and a connected knowledge graph of PRDs, ADRs, incidents, and history." src="https://danduh.me/assets/images/organization_human_memory-04d5148497326fc97027da106cf373db.webp" width="720" height="480" class="img_ev3q"></p>
<p>AI generates outputs. But those outputs don't come with intent, rationale, or shared understanding. You still need someone who can answer:</p>
<ul>
<li>Why is it built this way?</li>
<li>What did we try before?</li>
<li>What must never happen again?</li>
</ul>
<p>When those answers evaporate, you lose the ability to move.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-same-pattern-in-engineering">The Same Pattern in Engineering<a href="https://danduh.me/blog/ai-amnesia-graphrag#the-same-pattern-in-engineering" class="hash-link" aria-label="Direct link to The Same Pattern in Engineering" title="Direct link to The Same Pattern in Engineering">​</a></h2>
<p>Picture an org that went all-in on AI dev agents.</p>
<p>At first, it felt easy. Drop in a PRD, write prompts, and agents created services, wiring, tests, docs. Humans reviewed "for sanity," but reviews got lighter. Hard to argue with green tests and a happy product team.</p>
<p>Six months later, the mood shifts. A service depends on three other services in ways no one can explain. A config flag looks dangerous, but no one knows why it exists. A migration script looks alien. Every change becomes a gamble.</p>
<p>First comes drift: small shortcuts, missing ADRs, half-written docs. Then opacity: you can't explain your own architecture without a week of archaeology. Then fear: people avoid critical areas. Every incident feels like surgery in the dark.</p>
<p>By collapse, you have two options: hire senior engineers to reverse-engineer the system, or rewrite it.</p>
<p><img decoding="async" loading="lazy" alt="The AI-amnesia collapse in five phases: Speed, Drift, Opacity, Fear, and Collapse." src="https://danduh.me/assets/images/first_graph-ee6960b38169262a8142a33dedd79091.webp" width="1364" height="815" class="img_ev3q"></p>
<p>The code "works" most of the time. The AI shipped features. What collapsed was the <strong>shared mental model</strong> of how everything fits together.</p>
<p>Software isn't just code. It's a stack of memory:</p>
<ul>
<li>Product intent and constraints</li>
<li>Architectural decisions and tradeoffs</li>
<li>Invariants that must never break</li>
<li>History of past incidents</li>
<li>Who understands this well enough to touch it</li>
</ul>
<p>AI contributes code. By default, it doesn't preserve the ecosystem.</p>
<p>That's the problem.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="give-ai-and-humans-real-long-term-memory">Give AI (and Humans) Real Long-Term Memory<a href="https://danduh.me/blog/ai-amnesia-graphrag#give-ai-and-humans-real-long-term-memory" class="hash-link" aria-label="Direct link to Give AI (and Humans) Real Long-Term Memory" title="Direct link to Give AI (and Humans) Real Long-Term Memory">​</a></h2>
<p>The fix: capture institutional memory in a structured way.</p>
<p>Build a <strong>Knowledge Graph</strong>. Use <strong>GraphRAG</strong> to give humans and agents access to it.</p>
<p>Here's how it works. Every PRD, ADR, PR, release, incident, and postmortem becomes a node. Relationships become edges. The graph is backed by an archive (the original text), a search index, and a summary layer for token limits.</p>
<p>When an AI agent implements a change, it doesn't start from "here's some code, guess what it means." It starts from "here's the chain of decisions and events that led to this code."</p>
<p>Why GraphRAG? Traditional RAG returns "chunks of text that look similar to my query." That works for local details. Not for questions like:</p>
<ul>
<li>How did we go from the original PRD to last week's incident?</li>
<li>What decisions have we made about this database, and what went wrong?</li>
</ul>
<p>GraphRAG works at the level of entities, relationships, and clusters. It doesn't just retrieve text — it walks and summarizes neighborhoods of the graph. You get the <strong>story</strong> around a piece of code, not just a doc that shares some words with your query.</p>
<p>But this only works if you treat it as a <strong>discipline</strong>, not just storage.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="building-a-memory-system-not-just-a-database">Building a Memory System, Not Just a Database<a href="https://danduh.me/blog/ai-amnesia-graphrag#building-a-memory-system-not-just-a-database" class="hash-link" aria-label="Direct link to Building a Memory System, Not Just a Database" title="Direct link to Building a Memory System, Not Just a Database">​</a></h2>
<p>A real long-term memory system has two sides: what you store, and how you behave.</p>
<p>On the storage side, you keep an immutable archive of everything that matters: PRDs, ADRs, PR discussions, release notes, incident reports, monitoring summaries. You put a hybrid search index on top so you can find things both by exact IDs and by meaning. You extract entities and relationships to build your knowledge graph: which PRDs led to which ADRs, which ADRs governed which components, which PRs implemented them, which releases shipped them, which incidents were linked to them.</p>
<p>You also build a layer of summaries at different resolutions. Each PRD has a short summary. Each component has a description that includes what it does, which invariants it respects, and what it depends on. Each release has a clear description of what changed and what you expected. Each incident tells the story of what broke and what you learned.</p>
<p>That's the cold part of the system: the pipes, the storage, the indexes.</p>
<p>The hot part is how you <strong>change your definition of done</strong>.</p>
<p>"Done" no longer means "tests passed, PR merged." It means "<strong>this change is visible in our memory.</strong>"</p>
<p>A change without an ADR is not done. A risky release without proper notes is not done. An incident that doesn't produce new invariants and updated docs is not done.</p>
<p>The system enforces this. Open a PR that changes a core data model without linking to a PRD or ADR? Blocked. Ship a release touching a critical service without describing expected impact and dashboards? Pipeline complains. Close a major incident without writing what you learned? Process refuses.</p>
<p>Memory is wired into how work flows.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="walking-one-feature-through-the-loop">Walking One Feature Through the Loop<a href="https://danduh.me/blog/ai-amnesia-graphrag#walking-one-feature-through-the-loop" class="hash-link" aria-label="Direct link to Walking One Feature Through the Loop" title="Direct link to Walking One Feature Through the Loop">​</a></h2>
<p>Follow a single feature from idea to incident.</p>
<p>Your PM drops a PRD for "Instant Payouts v2." Clear goals, non-goals, constraints, SLOs. Rollout strategy and success metrics. The PRD becomes a node.</p>
<p>An AI assistant reads it and proposes a plan: which ADRs are relevant, which incidents to re-read, which services will be affected, where new decisions are needed. You adjust the plan, argue with it, correct it, approve it. The plan links back to the PRD and forward to components and risks.</p>
<p>Next comes the ADR. You write — or co-write with the agent — a focused document:</p>
<ul>
<li>How you'll handle balance caching to hit latency targets</li>
<li>What failure modes you considered</li>
<li>Why you rejected a simpler approach</li>
<li>What risks you're accepting</li>
</ul>
<p>Link the ADR back to the PRD and forward to the components that will implement it.</p>
<p>Then code. Agents generate the implementation, but not in a vacuum. For each PR, they see the PRD, the plan, the ADR, and any incidents that touched the same services. They propose changes in that context. Each PR declares what it's doing in human language and links to the artifacts.</p>
<p>Releases roll out with PRs attached, descriptions of what's expected, which dashboards matter. Monitoring episodes get summarized and linked back to suspected releases and components. If something breaks, an incident is declared. Timeline, root cause, fix get captured. New invariants are born: "never do X again," "always verify Y before Z."</p>
<p>Invariants become first-class citizens. Linked to the incidents that birthed them, the ADRs that codified them, the components that must respect them.</p>
<p>The loop looks something like this:</p>
<p><img decoding="async" loading="lazy" alt="The feature memory loop: product requirements → planning → architecture decision → implementation → release → monitoring → incident handling → invariants, feeding back into planning." src="https://danduh.me/assets/images/seconf_graph-466be0ec354ece86dc11bd68314f483f.webp" width="1165" height="816" class="img_ev3q"></p>
<p>Now imagine someone, six months later, wants to change a small function deep inside <code>payouts-core</code>. In a normal "AI wrote most of this" environment, they'd be guessing. In your environment, the agent begins by pulling the decision chain from the knowledge graph: the original PRD, the ADR that justified this odd-looking logic, the incident from two months ago where you accidentally double-paid a thousand users, the invariant that says "never attempt payout if ledger state is older than five minutes."</p>
<p>This doesn't magically guarantee safety. But it radically changes the starting point. The agent is no longer an amnesiac autocomplete engine. It's closer to a junior engineer who has just spent a day reading the history of this subsystem.</p>
<p>The same applies to humans. When a new hire asks, "Why is it built this way?", you don't point them to a ten-thousand-line file and a graveyard of old Slack threads. You give them the story in a structured way: here is the PRD, here are the key decisions, here is when it blew up, here is what we learned.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="what-this-fixes--and-what-it-doesnt">What This Fixes — and What It Doesn't<a href="https://danduh.me/blog/ai-amnesia-graphrag#what-this-fixes--and-what-it-doesnt" class="hash-link" aria-label="Direct link to What This Fixes — and What It Doesn't" title="Direct link to What This Fixes — and What It Doesn't">​</a></h2>
<p>A GraphRAG-backed knowledge graph with real governance eliminates categories of pain.</p>
<p>You stop re-litigating old decisions because the reasoning is recorded. You reduce repeated mistakes because incidents become part of context for future work. You avoid shipping risk-blind changes because agents and humans see which invariants and incidents are attached to the code.</p>
<p>Most importantly, you attack the specific AI failure mode that matters: not "the model hallucinates," but "we built a working system no one understands." This doesn't stop models from being wrong. But it makes it harder for them to be confidently wrong about the history of your own organization.</p>
<p><strong>But there are limits.</strong></p>
<p>Retrieval is not correctness. A model can fetch the right docs and still misapply the lessons. The graph can be wrong if extraction pipelines are noisy or docs are stale. Runtime reality can diverge from docs. A system might claim to be idempotent while production traces tell a different story.</p>
<p>The most dangerous failure: <strong>documentation theater</strong>. If AI writes the code and the "decisions" about the code without human oversight, you risk a beautiful, coherent, fictional history. It will look polished. It will be persuasive. It may be wrong where it matters most.</p>
<p>Governance is not optional. The graph needs human-validated edges. ADRs need actual authors who lived the tradeoffs. Incidents need to be painful enough that people care about capturing lessons. CI needs to enforce that changes are anchored in memory.</p>
<p>Without this, your knowledge graph becomes a museum: pretty, disconnected from life.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="the-point">The Point<a href="https://danduh.me/blog/ai-amnesia-graphrag#the-point" class="hash-link" aria-label="Direct link to The Point" title="Direct link to The Point">​</a></h2>
<p><img decoding="async" loading="lazy" alt="A knowledge graph linking PRD, ADR, pull request, release, and incident nodes to a summary layer." src="https://danduh.me/assets/images/the_point-a3e4c6a693570a7ad154304526d835a5.webp" width="720" height="480" class="img_ev3q"></p>
<p>The idea is simple.</p>
<p>Give your organization a long-term memory that both humans and AI can see and use. Make that memory structural, not optional. Connect what you meant to build, what you actually built, what broke, and what you swore you'd never do again.</p>
<p>If you pull it off, you don't choose between "AI everywhere, chaos later" and "no AI, we're scared." You get AI that moves fast inside a system that still remembers.</p>
<p>The next time the VP asks, "Who owns <code>billing-orchestrator</code> and why does it behave like this?", you don't get silence and blinking Zoom faces.</p>
<p>You get a story. A graph walk. The decisions, the incidents, the invariants, and a human who can say:</p>
<blockquote>
<p>"Here's what this is, here's how we got here, and here's how we can change it without burning the house down."</p>
</blockquote>
<p>AI generates code. Long-term memory makes sure it's generating a system you can still live in a year from now.</p>]]></content:encoded>
            <category>AI</category>
            <category>Architecture</category>
            <category>GraphRAG</category>
        </item>
    </channel>
</rss>