<?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: Aviral Arora</title>
    <description>The latest articles on DEV Community by Aviral Arora (@avi_arora_0206).</description>
    <link>https://dev.to/avi_arora_0206</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%2F4013914%2Fc4788b3e-4698-4329-92ce-d17db7a684e3.png</url>
      <title>DEV Community: Aviral Arora</title>
      <link>https://dev.to/avi_arora_0206</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/avi_arora_0206"/>
    <language>en</language>
    <item>
      <title>I Joined Ericsson With Modern Skills. The Codebase Was From Another Era. So I Gave Our AI a Memory.</title>
      <dc:creator>Aviral Arora</dc:creator>
      <pubDate>Fri, 03 Jul 2026 17:59:39 +0000</pubDate>
      <link>https://dev.to/avi_arora_0206/i-joined-ericsson-with-modern-skills-the-codebase-was-from-another-era-so-i-gave-our-ai-a-memory-1edn</link>
      <guid>https://dev.to/avi_arora_0206/i-joined-ericsson-with-modern-skills-the-codebase-was-from-another-era-so-i-gave-our-ai-a-memory-1edn</guid>
      <description>&lt;p&gt;I Joined Ericsson With Modern Skills. The Codebase Was From Another Era. So I Gave Our AI a Memory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hackathon:&lt;/strong&gt; &lt;a href="https://www.wemakedevs.org/hackathons/cognee" rel="noopener noreferrer"&gt;The Hangover Part AI — Where's My Context?&lt;/a&gt; (WeMakeDevs × Cognee)&lt;br&gt;
&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://frontend-six-alpha-67.vercel.app" rel="noopener noreferrer"&gt;https://frontend-six-alpha-67.vercel.app&lt;/a&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/AviArora02-commits/code-archaeologist" rel="noopener noreferrer"&gt;https://github.com/AviArora02-commits/code-archaeologist&lt;/a&gt;&lt;/p&gt;



&lt;p&gt;A few months ago I joined a team at Ericsson.&lt;/p&gt;

&lt;p&gt;On paper, I knew Java. I had worked with modern frameworks, clean APIs, and codebases where &lt;code&gt;git blame&lt;/code&gt; actually tells a coherent story. I walked in ready to contribute.&lt;/p&gt;

&lt;p&gt;What I found was different.&lt;/p&gt;

&lt;p&gt;The systems my team maintains are &lt;strong&gt;mostly Java&lt;/strong&gt;, with &lt;strong&gt;C++&lt;/strong&gt; in the mix — stacks that have been running for years, sometimes longer than I have been in the industry. The style is old. The patterns are unfamiliar. Variable names like &lt;code&gt;tmpBuf2&lt;/code&gt; and classes named after people who left before I was born. No one would call it beautiful.&lt;/p&gt;

&lt;p&gt;And yet — they &lt;strong&gt;work&lt;/strong&gt;. Surprisingly well. They handle real traffic, real customers, real infrastructure. Telecom does not get the luxury of a rewrite because the code looks ugly. You learn it. You respect it. You do not break it.&lt;/p&gt;

&lt;p&gt;That is where my struggle began — and where this hackathon project started.&lt;/p&gt;


&lt;h2&gt;
  
  
  The hangover is real
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://www.wemakedevs.org/hackathons/cognee" rel="noopener noreferrer"&gt;WeMakeDevs × Cognee hackathon&lt;/a&gt; frames it perfectly: &lt;em&gt;"Your AI woke up in Vegas with no memory of last night. Where's my context?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That was exactly my first month at Ericsson.&lt;/p&gt;


&lt;h2&gt;
  
  
  The first month: Amazon Q couldn't help me
&lt;/h2&gt;

&lt;p&gt;Like many large enterprises, Ericsson gives developers access to an internal LLM — in our case, &lt;strong&gt;Amazon Q&lt;/strong&gt;. On paper, it should have been my shortcut. Ask a question, get an answer, keep moving.&lt;/p&gt;

&lt;p&gt;It did not work that way for legacy code.&lt;/p&gt;

&lt;p&gt;I would paste a Java method and ask: &lt;em&gt;"Why does this retry loop behave differently when the connection pool is exhausted?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Amazon Q would give me a confident, generic answer about retry patterns — the kind you would read in a blog post from 2019. It had no idea that this specific loop existed because of a &lt;strong&gt;vendor firmware quirk&lt;/strong&gt; from 2011. It could not connect the method to the commit that introduced the workaround, the internal ticket that justified it, or the senior engineer who spent three weeks debugging it at 2 AM.&lt;/p&gt;

&lt;p&gt;I tried rephrasing. I tried giving more context. I tried asking about the C++ bridge layer that the Java service called into — a hand-written JNI wrapper that looked like it had been edited by five different people across fifteen years.&lt;/p&gt;

&lt;p&gt;Same result. Plausible answers. Wrong context.&lt;/p&gt;

&lt;p&gt;Meanwhile, my actual options were:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Read thousands of lines of undocumented code and hope I did not miss the one &lt;code&gt;if&lt;/code&gt; statement that mattered&lt;/li&gt;
&lt;li&gt;Wait for a senior engineer to get free&lt;/li&gt;
&lt;li&gt;Go back to them again when my follow-up question revealed I had misunderstood the first explanation&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I did all three. Repeatedly.&lt;/p&gt;

&lt;p&gt;That frustration is what sent me to this hackathon. I needed AI that &lt;strong&gt;doesn't forget&lt;/strong&gt; — and that &lt;strong&gt;cites its sources&lt;/strong&gt;.&lt;/p&gt;


&lt;h2&gt;
  
  
  How Cognee gives AI a memory
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/topoteretes/cognee" rel="noopener noreferrer"&gt;Cognee&lt;/a&gt; is a hybrid graph-vector memory layer for AI agents. Four operations. Total recall:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;cognee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remember&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;The retry loop caps at 3 because vendor firmware v2.1 hangs on the 4th attempt.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;answer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;cognee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Why does the connection retry stop at 3?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;cognee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;improve&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;                          &lt;span class="c1"&gt;# enrich
&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;cognee&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;forget&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;dataset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;old_repo&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;         &lt;span class="c1"&gt;# prune
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For this hackathon I used &lt;strong&gt;Cognee Cloud&lt;/strong&gt; — persistent, hosted graph memory — via a single &lt;code&gt;cognee.serve()&lt;/code&gt; call in our FastAPI backend. Each GitHub repo gets its own dataset (&lt;code&gt;owner_repo&lt;/code&gt;). Connect ten repos, get ten isolated memories. Delete one, the others stay intact.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stateless LLM (Amazon Q, ChatGPT)&lt;/th&gt;
&lt;th&gt;Cognee-backed memory&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Forgets every session&lt;/td&gt;
&lt;td&gt;Remembers across sessions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Guesses from training data&lt;/td&gt;
&lt;td&gt;Recalls from &lt;em&gt;your&lt;/em&gt; ingested context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No source citations&lt;/td&gt;
&lt;td&gt;Graph traversal to evidence&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cannot learn from your seniors&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;remember()&lt;/code&gt; + &lt;code&gt;improve()&lt;/code&gt; from expert input&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This isn't a chat wrapper. It's a &lt;strong&gt;memory architecture&lt;/strong&gt; — and it's why I built &lt;strong&gt;Code Archaeologist&lt;/strong&gt; for the hackathon.&lt;/p&gt;




&lt;h2&gt;
  
  
  My build: Code Archaeologist
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Code Archaeologist&lt;/strong&gt; is the tool I wish I had on day one at Ericsson.&lt;/p&gt;

&lt;p&gt;You connect a GitHub repository. The system ingests the codebase — &lt;strong&gt;160+ languages&lt;/strong&gt; including Java, C++, Python, COBOL, and more — along with git history, commit messages, and GitHub PR/issue links. Everything goes into Cognee via &lt;code&gt;remember()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Then you ask &lt;strong&gt;why&lt;/strong&gt;, not &lt;em&gt;where&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  A real question I would have asked
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Why does the &lt;code&gt;SessionManager&lt;/code&gt; class use a synchronized block around the connection pool instead of a proper lock-free queue?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A stateless LLM might lecture you about concurrency best practices.&lt;/p&gt;

&lt;p&gt;Code Archaeologist calls &lt;code&gt;recall()&lt;/code&gt; with &lt;code&gt;GRAPH_COMPLETION&lt;/code&gt; — Cognee traverses the knowledge graph and returns an answer with an &lt;strong&gt;evidence chain&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SessionManager.initPool() → commit a3f8c21 → PR #847 "Fix race under high load" → Issue #1204
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every claim links back to something real. Not a guess. &lt;strong&gt;Your repo's actual history.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Expert knowledge — what Amazon Q could never do
&lt;/h3&gt;

&lt;p&gt;When my senior finally explained why the C++ JNI bridge used a specific buffer size, that explanation lived in a Slack DM for about twenty minutes before it disappeared into the scroll.&lt;/p&gt;

&lt;p&gt;With Code Archaeologist, a senior can write:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"The JNI buffer is 4096 bytes because the legacy DSP firmware only accepts fixed-size packets. Do not change this without coordinating with the platform team. — Raj, 2019 outage postmortem."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That goes through &lt;code&gt;remember()&lt;/code&gt; into the same Cognee dataset. Then &lt;code&gt;improve()&lt;/code&gt; enriches the graph. The next person who asks &lt;em&gt;why&lt;/em&gt; the buffer is 4096 gets Raj's answer — stored permanently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Full Cognee lifecycle (hackathon requirement)
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Operation&lt;/th&gt;
&lt;th&gt;How we use it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;remember()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Ingest code entities + git blame + PR/issue context + expert notes per repo&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;recall()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;GRAPH_COMPLETION&lt;/code&gt; why-queries with evidence extraction&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;improve()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;After expert knowledge submit + positive user feedback&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;&lt;code&gt;forget()&lt;/code&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Per-repo delete — removes dataset without affecting other repos&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Also built: multi-repo fleet dashboard, knowledge graph visualization, dry-run cost estimates before ingest.&lt;/p&gt;




&lt;h2&gt;
  
  
  My build journey
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Week 1:&lt;/strong&gt; Prove the memory loop — connect repo, ingest, ask why, get sourced answer. Fixed raw JSON answers with a readable &lt;code&gt;AnswerView&lt;/code&gt; component.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 2:&lt;/strong&gt; Make Cognee Cloud reliable. Switched to blocking &lt;code&gt;remember()&lt;/code&gt; per file — slower but honest. One dataset per repo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 3:&lt;/strong&gt; Expert knowledge panel (the feature that directly addresses my Ericsson pain) + knowledge graph UI.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Week 4:&lt;/strong&gt; Ship to production — Next.js on Vercel, FastAPI on Railway, Cognee Cloud, 10 unit tests passing, CI on GitHub Actions.&lt;/p&gt;




&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Next.js (Vercel)  →  FastAPI (Railway)  →  Cognee Cloud
                              ↓
                    GitPython + GitHub API
                    (clone, blame, PRs, issues)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Demo walkthrough
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;strong&gt;&lt;a href="https://frontend-six-alpha-67.vercel.app" rel="noopener noreferrer"&gt;https://frontend-six-alpha-67.vercel.app&lt;/a&gt;&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Connect any public GitHub repo (Java, C++, or &lt;code&gt;https://github.com/azac/cobol-on-wheelchair&lt;/code&gt; for legacy demo)&lt;/li&gt;
&lt;li&gt;Review dry-run → confirm ingest&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trace:&lt;/strong&gt; ask &lt;em&gt;why&lt;/em&gt; something works the way it does&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expert knowledge:&lt;/strong&gt; teach the graph something only a human knows&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trace again&lt;/strong&gt; — see the graph use your input&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory fleet&lt;/strong&gt; sidebar — multi-repo overview&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Free Cognee Cloud credit for hackathon participants: code &lt;strong&gt;&lt;code&gt;COGNEE-35&lt;/code&gt;&lt;/strong&gt; at &lt;a href="https://www.wemakedevs.org/hackathons/cognee" rel="noopener noreferrer"&gt;wemakedevs.org/hackathons/cognee&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Lesson 1:&lt;/strong&gt; Memory without sources is just a slower hallucination. Graph traversal + git blame = citations engineers trust.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson 2:&lt;/strong&gt; &lt;code&gt;improve()&lt;/code&gt; after expert submissions genuinely makes follow-up queries better. The lifecycle isn't marketing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson 3:&lt;/strong&gt; &lt;code&gt;forget()&lt;/code&gt; matters — per-repo clean delete without breaking the fleet.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lesson 4:&lt;/strong&gt; Amazon Q failed me because it had no persistent memory of &lt;em&gt;my&lt;/em&gt; codebase. Cognee fixes the architecture. Expert knowledge fixes the human gap.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why this matters beyond the hackathon
&lt;/h2&gt;

&lt;p&gt;Every month, someone new joins a legacy team at a global company. They face the same Java/C++ code, the same missing docs, the same overloaded seniors.&lt;/p&gt;

&lt;p&gt;Code Archaeologist preserves what seniors know before the next person asks the same question for the fifth time.&lt;/p&gt;




&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://frontend-six-alpha-67.vercel.app" rel="noopener noreferrer"&gt;https://frontend-six-alpha-67.vercel.app&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/AviArora02-commits/code-archaeologist" rel="noopener noreferrer"&gt;https://github.com/AviArora02-commits/code-archaeologist&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hackathon:&lt;/strong&gt; &lt;a href="https://www.wemakedevs.org/hackathons/cognee" rel="noopener noreferrer"&gt;https://www.wemakedevs.org/hackathons/cognee&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Built for The Hangover Part AI hackathon (WeMakeDevs × Cognee). Memory powered by Cognee. Side project born from real onboarding pain at Ericsson Global.&lt;/em&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Publishing checklist (Best Blogs side track)
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Post to &lt;strong&gt;Dev.to&lt;/strong&gt; or &lt;strong&gt;Hashnode&lt;/strong&gt; (copy everything above this checklist)&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Title:&lt;/strong&gt; &lt;em&gt;I Joined Ericsson With Modern Skills. The Codebase Was From Another Era. So I Gave Our AI a Memory.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Cover image: screenshot of Trace answer + evidence chain&lt;/li&gt;
&lt;li&gt;[ ] Tags: &lt;code&gt;cognee&lt;/code&gt;, &lt;code&gt;hackathon&lt;/code&gt;, &lt;code&gt;wemakedevs&lt;/code&gt;, &lt;code&gt;legacy&lt;/code&gt;, &lt;code&gt;java&lt;/code&gt;, &lt;code&gt;ai&lt;/code&gt;, &lt;code&gt;ericsson&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;[ ] Submit blog URL on WeMakeDevs hackathon form&lt;/li&gt;
&lt;li&gt;[ ] Share on social tagging &lt;strong&gt;@wemakedevs&lt;/strong&gt; and &lt;strong&gt;Cognee&lt;/strong&gt; (see &lt;code&gt;docs/SOCIAL.md&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>cognee</category>
      <category>wemakedevs</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
