<?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: Divya s</title>
    <description>The latest articles on DEV Community by Divya s (@divya_s_71bf64b77a34715c8).</description>
    <link>https://dev.to/divya_s_71bf64b77a34715c8</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%2F3658330%2F737c77de-9248-4f69-981b-4eb662e7ccb4.png</url>
      <title>DEV Community: Divya s</title>
      <link>https://dev.to/divya_s_71bf64b77a34715c8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/divya_s_71bf64b77a34715c8"/>
    <language>en</language>
    <item>
      <title>Hindsight remembers which incident fixes only bought three days</title>
      <dc:creator>Divya s</dc:creator>
      <pubDate>Fri, 06 Nov 2026 15:22:19 +0000</pubDate>
      <link>https://dev.to/divya_s_71bf64b77a34715c8/hindsight-remembers-which-incident-fixes-only-bought-three-days-2d0c</link>
      <guid>https://dev.to/divya_s_71bf64b77a34715c8/hindsight-remembers-which-incident-fixes-only-bought-three-days-2d0c</guid>
      <description>&lt;p&gt;At 2 AM, someone on our payments team restarted &lt;code&gt;payment-gateway&lt;/code&gt;. The connection timeouts stopped, everyone went back to sleep, and three days later the same alert fired. Someone restarted it again.&lt;/p&gt;

&lt;p&gt;Nobody was being careless. The person on call simply didn't know the restart had been tried before and had only ever bought a few days. That knowledge existed. It was buried in a postmortem, a Slack thread and one engineer's memory. What didn't exist was anything that would put it in front of the next person at the moment they needed it.&lt;/p&gt;

&lt;p&gt;So I built NEXUS: an agent that remembers what an engineering team decided, what it assumed, who warned about what, how long the work really took, and which fixes actually worked. The memory layer is &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;Hindsight&lt;/a&gt;, and it ended up shaping the whole design.&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%2F9vp4dqi5lna4wrmosm9x.jpg" 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%2F9vp4dqi5lna4wrmosm9x.jpg" alt="NEXUS overview dashboard" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PREMORTEM&lt;/strong&gt; runs &lt;em&gt;before&lt;/em&gt; a decision. You describe a plan ("Move settlement events to Kafka, 3 weeks, no schema changes needed") and it checks it against the team's history: how far similar work overran, which of your assumptions have broken before, and whose warnings were ignored last time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;RECALL-X&lt;/strong&gt; runs &lt;em&gt;after&lt;/em&gt; something breaks. You paste the alert and logs, and it tells you which fixes resolved similar incidents, which ones failed, which ones only worked temporarily and for how long, and which earlier decision probably set the failure up.&lt;/p&gt;

&lt;p&gt;Both read and write the same per-team Hindsight memory bank. Every outcome someone logs (actual effort, broken assumptions, what fixed the outage) is retained immediately, so the next premortem or investigation starts smarter.&lt;/p&gt;

&lt;p&gt;To test it I seeded two fictional teams with about 30 decisions and 16 incidents, written to contain realistic patterns. Every number in this article comes from that illustrative history, not from a real company.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core idea: remember failures, not just facts
&lt;/h2&gt;

&lt;p&gt;My first instinct was to treat this like retrieval: dump the postmortems into a store and search them. That gives you documents. What I actually needed was the &lt;em&gt;relationship&lt;/em&gt; between a decision, its assumptions and what happened afterwards, and the ability to ask targeted questions about it: "which assumptions broke?", "which warnings were ignored?", "which fixes were temporary?"&lt;/p&gt;

&lt;p&gt;Hindsight made that practical in two ways: the &lt;code&gt;retain&lt;/code&gt; call takes tags and a &lt;code&gt;document_id&lt;/code&gt;, and &lt;code&gt;recall&lt;/code&gt; can filter on tags. So every memory NEXUS writes is narrative text (so Hindsight can extract entities, people, services and time) plus structured tags for targeting:&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;def&lt;/span&gt; &lt;span class="nf"&gt;decision_tags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dict&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;phase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
    &lt;span class="n"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kind:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;phase&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;category:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;category&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;team:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;team&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;+=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;service:&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;services&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])]&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;phase&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;outcome&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;held&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assumptions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])):&lt;/span&gt;
            &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assumption:broken&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;any&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;addressed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;r&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;risks&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[])):&lt;/span&gt;
            &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;append&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;risk:ignored&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Incidents get &lt;code&gt;fix:temporary&lt;/code&gt;, &lt;code&gt;fix:failed&lt;/code&gt; and &lt;code&gt;fix:resolved&lt;/code&gt; the same way. The &lt;code&gt;document_id&lt;/code&gt; is always something like &lt;code&gt;D-0112:outcome&lt;/code&gt; or &lt;code&gt;INC-0204:incident&lt;/code&gt;, which turned out to be the most useful decision I made: every recalled memory can be traced back to the exact record it came from, so every warning in the UI cites its evidence.&lt;/p&gt;

&lt;p&gt;Each team gets its own bank (&lt;code&gt;nexus-payments&lt;/code&gt;, &lt;code&gt;nexus-platform&lt;/code&gt;), created with a mission and a reflect mission that tells Hindsight to behave like a skeptical staff engineer running a premortem. Keeping banks separate matters more than I expected: in the seeded data, the payments team underestimates migrations by about 2.3x while the platform team is fine at migrations and terrible at compliance work. One shared memory would have blurred both.&lt;/p&gt;

&lt;h2&gt;
  
  
  How a premortem uses memory
&lt;/h2&gt;

&lt;p&gt;A single premortem runs five recall strategies in parallel, each aimed at a different kind of failure:&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="n"&gt;strategies&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;parsed&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;summary&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;''&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;How far over estimate did past &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;cat&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; work run? actual vs estimated weeks&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kind:outcome&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Assumptions that broke: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;; &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;assumptions&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;assumption:broken&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Risks people raised that were ignored for &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;cat&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; work, e.g. rollback&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;risk:ignored&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Production incidents on &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;services&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; caused by earlier decisions&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;kind:incident&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;recall_many&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;team&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;strategies&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then &lt;code&gt;reflect&lt;/code&gt; asks the bank what the team should remember before committing, and the LLM (Groq, &lt;code&gt;gpt-oss-120b&lt;/code&gt;) writes the summary and checklist.&lt;/p&gt;

&lt;p&gt;One rule I'm glad I set early: &lt;strong&gt;the LLM never does the arithmetic.&lt;/strong&gt; Calibration factors, break rates and how long a fix lasted are computed deterministically from the records, and passed to the model as facts it isn't allowed to change. The model explains; the history counts. It removed a whole class of confident-but-invented numbers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before and after
&lt;/h2&gt;

&lt;p&gt;Here's the same proposal with the same model, once without memory and once with it:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Migrate settlement events from RabbitMQ to Kafka. Estimate 3 weeks. Assumptions: no schema changes needed; consumer lag will stay under a minute; we can roll back by flipping the producer flag.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Without memory&lt;/strong&gt;, the agent gives the list every premortem has: data loss during cutover, performance regression, add buffer, update runbooks. All correct, and none of it changes the plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With Hindsight&lt;/strong&gt;, it says:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Migration work on this team has run about 2.1x over, so 3 weeks is realistically about 6.3 (based on 4 past migrations).&lt;/li&gt;
&lt;li&gt;"No schema changes needed" was assumed in 5 past decisions and broke in all 5.&lt;/li&gt;
&lt;li&gt;Priya warned about rollback on three earlier decisions. She was ignored each time, and each time it became an incident.&lt;/li&gt;
&lt;li&gt;Similar decisions on these services led to 5 production incidents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every bullet links to the decisions and incidents behind it.&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%2Fx77gvaljnoytlhhb5w3o.jpg" 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%2Fx77gvaljnoytlhhb5w3o.jpg" alt="Premortem with memory-backed evidence" width="800" height="454"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the incident side, the restart story finally gets its answer. For a new &lt;code&gt;HikariPool - Connection is not available&lt;/code&gt; alert on &lt;code&gt;payment-gateway&lt;/code&gt;, RECALL-X shows that restarting was tried on four similar incidents and only ever lasted about three days, that increasing the pool size failed twice, and that reducing per-pod pools and adding PgBouncer resolved it twice. You can even type a fix you're about to try and it will warn you if it failed before.&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%2Fjkybfk0s84414skobu55.jpg" 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%2Fjkybfk0s84414skobu55.jpg" alt="Incident investigation with failed-fix warning" width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I didn't plan for: memories that disagree
&lt;/h2&gt;

&lt;p&gt;Once the history grew, Hindsight started returning memories that contradicted each other. In one incident, increasing the database connection pool fixed the problem. In two others, the same fix made things worse.&lt;/p&gt;

&lt;p&gt;A naive agent would average those or pick the most recent. Instead, NEXUS now detects the conflict and compares the context recorded with each incident. In this case the difference is arithmetic: in the incident where a bigger pool worked, 3 replicas × 40 connections used 120 of 400 available. Where it failed, 6 replicas × 80 asked for 480 against a limit of 200. The recommendation becomes "check replicas × pool size against the database limit first", not "increase the pool" or "never increase the pool".&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%2F6so61h1h7inod7d16mcv.jpg" 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%2F6so61h1h7inod7d16mcv.jpg" alt="Memory conflict panel" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's the behaviour I'd want from a senior engineer: don't hide the contradicting evidence, explain it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does it actually get better?
&lt;/h2&gt;

&lt;p&gt;To check that memory improves predictions rather than just decorating them, I replayed every closed decision in order, letting NEXUS use only the memories that existed on the day each one was proposed. On the seeded history, raw team estimates were off by roughly 36% on average over the last few decisions, while memory-corrected estimates were off by about 19%. That's illustrative data, so treat it as a proof of mechanism rather than a benchmark, but the direction is the point: the agent improves because outcomes are retained and recalled, not because any model was retrained.&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%2Fnfzyzzriio4c9108drfc.jpg" 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%2Fnfzyzzriio4c9108drfc.jpg" alt="Learning curve" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Lessons learned
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Store failures and their context, not just outcomes.&lt;/strong&gt; "Restart worked" is almost useless. "Restart worked and the problem came back in 3 days, with 6 replicas and a 200-connection limit" is what makes the next decision better.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Give every memory a document ID you can trace.&lt;/strong&gt; Without it, the UI can only say "memory says so". With it, every warning is auditable, and that's what makes engineers trust it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Tags turn recall from search into questions.&lt;/strong&gt; Five targeted recalls ("broken assumptions", "ignored risks", "temporary fixes") beat one broad query every time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Keep the LLM away from the math.&lt;/strong&gt; Let memory and code produce the numbers, and let the model explain them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. One thing that hurt:&lt;/strong&gt; the synchronous Hindsight client didn't play well inside FastAPI's thread pool, because each worker thread ended up with its own event loop. Running every Hindsight call on one dedicated async loop fixed it and made the parallel recalls genuinely parallel.&lt;/p&gt;

&lt;p&gt;If you want to try this pattern yourself, start with the &lt;a href="https://hindsight.vectorize.io/" rel="noopener noreferrer"&gt;Hindsight documentation&lt;/a&gt; and the &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;Hindsight GitHub repository&lt;/a&gt;. Vectorize also has a good primer on &lt;a href="https://vectorize.io/what-is-agent-memory" rel="noopener noreferrer"&gt;what agent memory is and why it differs from RAG&lt;/a&gt;. My biggest takeaway: the most valuable thing an engineering agent can remember isn't what worked. It's what only &lt;em&gt;looked&lt;/em&gt; like it worked.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;NEXUS is open source: &lt;a href="https://github.com/Divyashree4757/NEXUS" rel="noopener noreferrer"&gt;github.com/Divyashree4757/NEXUS&lt;/a&gt;. Built with help from Code.in.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>agents</category>
      <category>llm</category>
    </item>
    <item>
      <title>How the AI Agents Intensive Transformed My Understanding of Autonomous Systems</title>
      <dc:creator>Divya s</dc:creator>
      <pubDate>Fri, 12 Dec 2025 08:27:35 +0000</pubDate>
      <link>https://dev.to/divya_s_71bf64b77a34715c8/how-the-ai-agents-intensive-transformed-my-understanding-of-autonomous-systems-256k</link>
      <guid>https://dev.to/divya_s_71bf64b77a34715c8/how-the-ai-agents-intensive-transformed-my-understanding-of-autonomous-systems-256k</guid>
      <description>&lt;ul&gt;
&lt;li&gt;Learning Reflections from the Google &amp;amp; Kaggle AI Agents Intensive Course&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Participating in the AI Agents Intensive Course with Google and Kaggle was a transformative experience that changed the way I think about artificial intelligence. Before the course, I saw AI agents mainly as advanced chat interfaces. After completing the intensive, I now understand them as intelligent, goal-driven systems capable of planning, reasoning, tool use, and multi-step autonomy.&lt;/p&gt;

&lt;p&gt;In this reflection, I share my key learnings, the concepts that resonated with me the most, how my understanding evolved throughout the course, and a look at my original capstone project.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Key Learnings &amp;amp; Insights&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;Agents Are Systems, Not Just Models&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the biggest insights for me was understanding that agents are architectures, not just LLMs responding to prompts. Agents combine:&lt;br&gt;
•Reasoning loops&lt;br&gt;
•Planning structures&lt;br&gt;
•Memory (short &amp;amp; long-term)&lt;br&gt;
•Tool use&lt;br&gt;
•Environment interaction&lt;/p&gt;

&lt;p&gt;This system-level view helped me understand why agents can operate autonomously and how they perform multi-step workflows reliably.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tool Use = True Autonomy&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The concept that resonated with me most was tool use.&lt;br&gt;
Seeing how agents call external functions, access data, and take real actions made me realize:&lt;/p&gt;

&lt;p&gt;Autonomy begins when an agent can act beyond text generation.&lt;/p&gt;

&lt;p&gt;Tool use unlocks real-world capability such as:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Executing code
2.Querying APIs
3.Manipulating files 
4.Running utilities&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This was one of my favorite takeaways from the course.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Multi-Agent Collaboration Is Surprisingly Learning Reflections from the Google &amp;amp; Kaggle AI Agents Intensive Course&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Participating in the AI Agents Intensive Course with Google and Kaggle was a transformative experience that changed the way I think about artificial intelligence. Before the course, I saw AI agents mainly as advanced chat interfaces. After completing the intensive, I now understand them as intelligent, goal-driven systems capable of planning, reasoning, tool use, and multi-step autonomy.&lt;/p&gt;

&lt;p&gt;In this reflection, I share my key learnings, the concepts that resonated with me the most, how my understanding evolved throughout the course, and a look at my original capstone project.&lt;/p&gt;

&lt;p&gt;⸻&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%2Fikeqj2amr5t23o9trv0n.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%2Fikeqj2amr5t23o9trv0n.png" alt=" " width="800" height="533"&gt;&lt;/a&gt; Key Learnings &amp;amp; Insights&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agents Are Systems, Not Just Models&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the biggest insights for me was understanding that agents are architectures, not just LLMs responding to prompts. Agents combine:&lt;br&gt;
    • Reasoning loops&lt;br&gt;
    • Planning structures&lt;br&gt;
    • Memory (short &amp;amp; long-term)&lt;br&gt;
    • Tool use&lt;br&gt;
    • Environment interaction&lt;/p&gt;

&lt;p&gt;This system-level view helped me understand why agents can operate autonomously and how they perform multi-step workflows reliably.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tool Use = True Autonomy&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The concept that resonated with me most was tool use.&lt;br&gt;
Seeing how agents call external functions, access data, and take real actions made me realize:&lt;/p&gt;

&lt;p&gt;Autonomy begins when an agent can act beyond text generation.&lt;/p&gt;

&lt;p&gt;Tool use unlocks real-world capability such as:&lt;br&gt;
✔ Executing code&lt;br&gt;
✔ Querying APIs&lt;br&gt;
✔ Manipulating files&lt;br&gt;
✔ Running utilities&lt;/p&gt;

&lt;p&gt;This was one of my favorite takeaways from the course.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Multi-Agent Collaboration Is Surprisingly Powerful&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I learned how different agents can coordinate like teammates:&lt;br&gt;
    • Sharing context&lt;br&gt;
    • Delegating tasks&lt;br&gt;
    • Combining strengths&lt;br&gt;
    • Reviewing each other’s work&lt;/p&gt;

&lt;p&gt;This changed my understanding of what’s possible when multiple agents communicate.&lt;/p&gt;

&lt;p&gt;Multi-agent systems felt like the closest thing to AI “teams” working together toward a shared goal — a concept that excited me the most.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hands-on Kaggle Labs Made Everything Real&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The labs were one of the most impactful parts of the course.&lt;br&gt;
They helped me:&lt;br&gt;
    • Observe structured reasoning in action&lt;br&gt;
    • Debug agent loops&lt;br&gt;
    • Customize workflows&lt;br&gt;
    • Understand how tool-calling integrates with planning&lt;/p&gt;

&lt;p&gt;These exercises transformed abstract concepts into practical understanding.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;How My Understanding of AI Agents Evolved&lt;/p&gt;

&lt;p&gt;Before the Intensive:&lt;/p&gt;

&lt;p&gt;I believed agents were enhanced chatbots with better reasoning.&lt;/p&gt;

&lt;p&gt;After the Intensive:&lt;/p&gt;

&lt;p&gt;I now see agents as autonomous decision-making systems that:&lt;br&gt;
    • Plan before acting&lt;br&gt;
    • Break down tasks&lt;br&gt;
    • Evaluate results&lt;br&gt;
    • Use tools&lt;br&gt;
    • Interact with their environment&lt;br&gt;
    • Collaborate with other agents&lt;/p&gt;

&lt;p&gt;This shift was the most important evolution in my understanding.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;🛠️ Capstone Project: Micro-Time Recycler Agent (MTR-Agent)&lt;/p&gt;

&lt;p&gt;An original multi-agent system that turns micro-moments into micro-achievements.&lt;/p&gt;

&lt;p&gt;Concept Overview&lt;/p&gt;

&lt;p&gt;Most productivity tools focus on minutes or hours. My project focuses on seconds.&lt;/p&gt;

&lt;p&gt;The MTR-Agent identifies tiny gaps in a user’s day — 20 to 90 seconds — and fills them with meaningful micro-actions like stretching, reviewing a flashcard, or taking a deep breath.&lt;/p&gt;

&lt;p&gt;Multi-Agent Architecture&lt;br&gt;
    •Time Scanner Agent: Detects micro-gaps&lt;br&gt;
    •Micro-Task Generator Agent: Suggests tasks sized to each gap&lt;br&gt;
    •Priority Manager Agent: Aligns tasks with user goals&lt;br&gt;
    •Reward Agent: Reinforces progress with streaks and XP&lt;/p&gt;

&lt;p&gt;What I Learned&lt;br&gt;
    •Even simple agents can have big real-world impact through thoughtful workflows&lt;br&gt;
    • Role separation makes multi-agent systems more reliable&lt;br&gt;
    • Planning + memory strengthen autonomy&lt;br&gt;
    • Creativity is a powerful part of agent design&lt;/p&gt;

&lt;p&gt;This project helped me apply every major concept from the course: architectures, planning, reasoning, agent collaboration, and workflow design.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Final Reflection&lt;/p&gt;

&lt;p&gt;The AI Agents Intensive Course reshaped how I think about AI — not as a tool that responds, but as a system that acts. I walked away with a deeper understanding of agentic workflows, practical experience through labs, and a strong appreciation for multi-agent design.&lt;/p&gt;

&lt;p&gt;Most importantly, I now feel confident in building both simple and sophisticated agent systems — and excited to continue learning, experimenting, and creating.&lt;/p&gt;

&lt;p&gt;•Sharing context&lt;br&gt;
•Delegating tasks&lt;br&gt;
•Combining strengths&lt;br&gt;
•Reviewing each other’s work&lt;/p&gt;

&lt;p&gt;This changed my understanding of what’s possible when multiple agents communicate.&lt;/p&gt;

&lt;p&gt;Multi-agent systems felt like the closest thing to AI “teams” working together toward a shared goal — a concept that excited me the most.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hands-on Kaggle Labs Made Everything Real&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The labs were one of the most impactful parts of the course.&lt;br&gt;
They helped me:&lt;br&gt;
•Observe structured reasoning in action&lt;br&gt;
•Debug agent loops&lt;br&gt;
• Customize workflows&lt;br&gt;
•Understand how tool-calling integrates with planning&lt;/p&gt;

&lt;p&gt;These exercises transformed abstract concepts into practical understanding.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;How My Understanding of AI Agents Evolved&lt;/p&gt;

&lt;p&gt;Before the Intensive:&lt;/p&gt;

&lt;p&gt;I believed agents were enhanced chatbots with better reasoning.&lt;/p&gt;

&lt;p&gt;After the Intensive:&lt;/p&gt;

&lt;p&gt;I now see agents as autonomous decision-making systems that:&lt;br&gt;
•Plan before acting&lt;br&gt;
•Break down tasks&lt;br&gt;
•Evaluate results&lt;br&gt;
•Use tools&lt;br&gt;
•Interact with their environment&lt;br&gt;
•Collaborate with other agents&lt;/p&gt;

&lt;p&gt;This shift was the most important evolution in my understanding.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Capstone Project: Micro-Time Recycler Agent (MTR-Agent)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;An original multi-agent system that turns micro-moments into micro-achievements.&lt;/p&gt;

&lt;p&gt;Concept Overview&lt;/p&gt;

&lt;p&gt;Most productivity tools focus on minutes or hours. My project focuses on seconds.&lt;/p&gt;

&lt;p&gt;The MTR-Agent identifies tiny gaps in a user’s day — 20 to 90 seconds — and fills them with meaningful micro-actions like stretching, reviewing a flashcard, or taking a deep breath.&lt;/p&gt;

&lt;p&gt;Multi-Agent Architecture&lt;br&gt;
•Time Scanner Agent: Detects micro-gaps&lt;br&gt;
•Micro-Task Generator Agent: Suggests tasks sized to each gap&lt;br&gt;
•Priority Manager Agent: Aligns tasks with user goals&lt;br&gt;
•Reward Agent: Reinforces progress with streaks and XP&lt;/p&gt;

&lt;p&gt;What I Learned&lt;br&gt;
•Even simple agents can have big real-world impact through thoughtful workflows&lt;br&gt;
•Role separation makes multi-agent systems more reliable&lt;br&gt;
•Planning + memory strengthen autonomy&lt;br&gt;
•Creativity is a powerful part of agent design&lt;/p&gt;

&lt;p&gt;This project helped me apply every major concept from the course: architectures, planning, reasoning, agent collaboration, and workflow design.&lt;/p&gt;

&lt;p&gt;The AI Agents Intensive Course reshaped how I think about AI — not as a tool that responds, but as a system that acts. I walked away with a deeper understanding of agentic workflows, practical experience through labs, and a strong appreciation for multi-agent design.&lt;/p&gt;

&lt;p&gt;Most importantly, I now feel confident in building both simple and sophisticated agent systems — and excited to continue learning, experimenting, and creating.&lt;/p&gt;

</description>
      <category>googleaichallenge</category>
      <category>ai</category>
      <category>agents</category>
      <category>devchallenge</category>
    </item>
  </channel>
</rss>
