<?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: Nadiya Nimra</title>
    <description>The latest articles on DEV Community by Nadiya Nimra (@nadiya_nimra_6f58f20819bf).</description>
    <link>https://dev.to/nadiya_nimra_6f58f20819bf</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%2F4146441%2Fa889951a-81b1-455d-a5a5-18d3b9461a8d.png</url>
      <title>DEV Community: Nadiya Nimra</title>
      <link>https://dev.to/nadiya_nimra_6f58f20819bf</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nadiya_nimra_6f58f20819bf"/>
    <language>en</language>
    <item>
      <title>[Boost]</title>
      <dc:creator>Nadiya Nimra</dc:creator>
      <pubDate>Mon, 28 Sep 2026 08:06:51 +0000</pubDate>
      <link>https://dev.to/nadiya_nimra_6f58f20819bf/-1mn5</link>
      <guid>https://dev.to/nadiya_nimra_6f58f20819bf/-1mn5</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/nadiya_nimra_6f58f20819bf/how-i-used-hindsight-to-turn-sre-incidents-into-memory-54bg" class="crayons-story__hidden-navigation-link"&gt;How I Used Hindsight to Turn SRE Incidents Into Memory&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/nadiya_nimra_6f58f20819bf" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F4146441%2Fa889951a-81b1-455d-a5a5-18d3b9461a8d.png" alt="nadiya_nimra_6f58f20819bf profile" class="crayons-avatar__image" width="96" height="96"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/nadiya_nimra_6f58f20819bf" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Nadiya Nimra
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Nadiya Nimra
                
                
              
              &lt;div id="story-author-preview-content-4760988" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/nadiya_nimra_6f58f20819bf" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F4146441%2Fa889951a-81b1-455d-a5a5-18d3b9461a8d.png" class="crayons-avatar__image" alt="" width="96" height="96"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Nadiya Nimra&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/nadiya_nimra_6f58f20819bf/how-i-used-hindsight-to-turn-sre-incidents-into-memory-54bg" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 28&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/nadiya_nimra_6f58f20819bf/how-i-used-hindsight-to-turn-sre-incidents-into-memory-54bg" id="article-link-4760988"&gt;
          How I Used Hindsight to Turn SRE Incidents Into Memory
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/opensource"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;opensource&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sre"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sre&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/nadiya_nimra_6f58f20819bf/how-i-used-hindsight-to-turn-sre-incidents-into-memory-54bg#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>How I Used Hindsight to Turn SRE Incidents Into Memory</title>
      <dc:creator>Nadiya Nimra</dc:creator>
      <pubDate>Mon, 28 Sep 2026 07:12:29 +0000</pubDate>
      <link>https://dev.to/nadiya_nimra_6f58f20819bf/how-i-used-hindsight-to-turn-sre-incidents-into-memory-54bg</link>
      <guid>https://dev.to/nadiya_nimra_6f58f20819bf/how-i-used-hindsight-to-turn-sre-incidents-into-memory-54bg</guid>
      <description>&lt;p&gt;At 2:00 AM, an incident rarely starts with a completely new problem. More often, the symptoms look familiar: a service suddenly becomes slow, database connections climb, error rates increase, and someone remembers that something similar happened a few weeks ago.&lt;/p&gt;

&lt;p&gt;The difficult part is finding that previous incident quickly enough to make it useful.&lt;/p&gt;

&lt;p&gt;I built Resilify.AI around this problem. It is an SRE incident investigation and remediation system that combines live telemetry with persistent organizational memory. Instead of treating every production incident as an isolated prompt, Resilify.AI uses Hindsight to recall relevant incidents, reason over their outcomes, and retain what the team learned after recovery.&lt;/p&gt;

&lt;p&gt;The design goal was simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When the next incident looks like something we've already experienced, the agent should be able to remember what happened last time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What Resilify.AI Does
&lt;/h2&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%2F1kek0zysv7dbwl4qjwjh.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F1kek0zysv7dbwl4qjwjh.png" alt=" " width="606" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The important design decision here is that telemetry becomes a structured incident before it reaches the reasoning layer.&lt;/p&gt;

&lt;p&gt;That gives the rest of the system a consistent representation of an outage.&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%2Fo30j27beqmm885p2q2ji.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fo30j27beqmm885p2q2ji.png" alt=" " width="602" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Interesting Part: Giving the Agent Organizational Memory
&lt;/h2&gt;

&lt;p&gt;A stateless language model can reason about the current incident, but it does not automatically know how the same organization handled similar incidents in the past.&lt;/p&gt;

&lt;p&gt;That was the main reason I introduced Hindsight.&lt;/p&gt;

&lt;p&gt;I use &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;Hindsight&lt;/a&gt; as the persistent memory layer for Resilify.AI. Its &lt;a href="https://hindsight.vectorize.io/" rel="noopener noreferrer"&gt;documentation&lt;/a&gt; describes the memory primitives I use for recalling previous incidents and retaining the results of resolved incidents. I also found Vectorize's explanation of &lt;a href="https://vectorize.io/what-is-agent-memory" rel="noopener noreferrer"&gt;agent memory&lt;/a&gt; useful when thinking about how operational experience should become part of an agent's future context.&lt;/p&gt;

&lt;p&gt;I use an incident memory bank:&lt;/p&gt;

&lt;p&gt;src-incidents-bank&lt;/p&gt;

&lt;p&gt;The memory service supports both cloud-backed Hindsight and a local development fallback.&lt;/p&gt;

&lt;p&gt;One design decision I found useful was making the storage mode configurable rather than hard-coding a single environment.&lt;/p&gt;

&lt;p&gt;The service checks the environment before deciding which implementation to use:&lt;/p&gt;

&lt;p&gt;get mode() {&lt;br&gt;
  const envMode =&lt;br&gt;
    (process.env.HINDSIGHT_MODE || '').toLowerCase();&lt;/p&gt;

&lt;p&gt;if (&lt;br&gt;
    envMode === 'cloud' &amp;amp;&amp;amp;&lt;br&gt;
    process.env.HINDSIGHT_API_KEY &amp;amp;&amp;amp;&lt;br&gt;
    !process.env.HINDSIGHT_API_KEY.startsWith('paste_')&lt;br&gt;
  ) {&lt;br&gt;
    return 'cloud';&lt;br&gt;
  }&lt;/p&gt;

&lt;p&gt;return 'local';&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;This kept local development simple while allowing the same service to connect to Hindsight Cloud.&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%2Fc6bzk9wln4xw9a8drzi0.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc6bzk9wln4xw9a8drzi0.png" alt=" " width="453" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Recalling Historical Incidents
&lt;/h2&gt;

&lt;p&gt;When a new incident arrives, the agent searches the historical memory for relevant experiences.&lt;/p&gt;

&lt;p&gt;The cloud path sends the incident query to the Hindsight memory bank:&lt;/p&gt;

&lt;p&gt;if (this.mode === 'cloud' &amp;amp;&amp;amp; this.apiKey) {&lt;br&gt;
  try {&lt;br&gt;
    const response = await fetch(&lt;br&gt;
      &lt;code&gt;${this.apiUrl}/v1/banks/${bank}/recall&lt;/code&gt;,&lt;br&gt;
      {&lt;br&gt;
        method: 'POST',&lt;br&gt;
        headers: {&lt;br&gt;
          'Content-Type': 'application/json',&lt;br&gt;
          'Authorization': &lt;code&gt;Bearer ${this.apiKey}&lt;/code&gt;&lt;br&gt;
        },&lt;br&gt;
        body: JSON.stringify({&lt;br&gt;
          query,&lt;br&gt;
          limit: options.limit || 3&lt;br&gt;
        })&lt;br&gt;
      }&lt;br&gt;
    );&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (response.ok) {
  const cloudResult = await response.json();

  return {
    ...cloudResult,
    mode: 'cloud'
  };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;} catch (err) {&lt;br&gt;
    // fallback handling&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The important point is not simply that old incidents are stored.&lt;/p&gt;

&lt;p&gt;The current incident is actively used as the query for finding relevant historical experience.&lt;/p&gt;

&lt;p&gt;For example, an incident involving:&lt;/p&gt;

&lt;p&gt;payment-gateway&lt;br&gt;
high latency&lt;br&gt;
database connections&lt;br&gt;
recent deployment&lt;/p&gt;

&lt;p&gt;can retrieve an earlier incident involving similar symptoms.&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%2F8bsi6y1jajzq308xc91u.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8bsi6y1jajzq308xc91u.png" alt=" " width="602" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Memory Changes the Investigation
&lt;/h2&gt;

&lt;p&gt;The important question was not:&lt;/p&gt;

&lt;p&gt;"Can I store an incident in memory?"&lt;/p&gt;

&lt;p&gt;The more interesting question was:&lt;/p&gt;

&lt;p&gt;"Does remembering the incident actually change what the agent does next?"&lt;/p&gt;

&lt;p&gt;That became the central design principle.&lt;/p&gt;

&lt;p&gt;Suppose the current telemetry shows:&lt;/p&gt;

&lt;p&gt;DB Connections: 100/100&lt;br&gt;
Error Rate: 38.7%&lt;br&gt;
P99 Latency: 4820 ms&lt;br&gt;
Recent Deployment: v2.8.1&lt;/p&gt;

&lt;p&gt;The agent retrieves a historical incident with a similar pattern.&lt;/p&gt;

&lt;p&gt;The previous incident contained:&lt;/p&gt;

&lt;p&gt;Root Cause:&lt;br&gt;
Hikari CP connection pool starvation&lt;/p&gt;

&lt;p&gt;Remediation:&lt;br&gt;
RB-PAY-04&lt;/p&gt;

&lt;p&gt;Outcome:&lt;br&gt;
Recovery verified&lt;/p&gt;

&lt;p&gt;The current agent can now use that historical evidence when generating its hypothesis.&lt;/p&gt;

&lt;p&gt;Instead of simply saying:&lt;/p&gt;

&lt;p&gt;"Check the database."&lt;/p&gt;

&lt;p&gt;it can explain why connection-pool exhaustion is a likely cause and show the historical incident supporting that hypothesis.&lt;/p&gt;

&lt;p&gt;This is the difference between storing memory and using memory.&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%2Fq2w2qjozj2c335mve0lc.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fq2w2qjozj2c335mve0lc.png" alt=" " width="602" height="312"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Separating Evidence From Diagnosis
&lt;/h2&gt;

&lt;p&gt;I deliberately avoid presenting the model's diagnosis as absolute truth.&lt;/p&gt;

&lt;p&gt;The interface uses:&lt;/p&gt;

&lt;p&gt;LIKELY ROOT CAUSE&lt;/p&gt;

&lt;p&gt;rather than:&lt;/p&gt;

&lt;p&gt;ROOT CAUSE&lt;/p&gt;

&lt;p&gt;The reasoning layer combines current telemetry with historical evidence.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Likely Root Cause:&lt;br&gt;
Database connection pool exhaustion&lt;/p&gt;

&lt;p&gt;Evidence:&lt;/p&gt;

&lt;p&gt;DB connections reached 100/100&lt;br&gt;
P99 latency increased sharply&lt;br&gt;
Error rate increased&lt;br&gt;
Recent deployment occurred&lt;br&gt;
Similar historical incident was resolved using the same remediation pattern&lt;/p&gt;

&lt;p&gt;This makes the reasoning inspectable.&lt;/p&gt;

&lt;p&gt;An engineer can see both the recommendation and the evidence 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%2F74u0vqopcwx804s2aa9v.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F74u0vqopcwx804s2aa9v.png" alt=" " width="602" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Keeping an Engineer in the Loop
&lt;/h2&gt;

&lt;p&gt;I did not want the system to blindly execute infrastructure changes.&lt;/p&gt;

&lt;p&gt;The workflow therefore includes an explicit approval boundary.&lt;/p&gt;

&lt;p&gt;The engineer can inspect the recommendation before allowing the remediation to proceed.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Recommended Runbook: RB-PAY-04&lt;/p&gt;

&lt;p&gt;Increase database connection capacity&lt;br&gt;
Restart the connection service&lt;br&gt;
Monitor error rate&lt;br&gt;
Monitor latency&lt;br&gt;
Verify service health&lt;/p&gt;

&lt;p&gt;[ APPROVE &amp;amp; EXECUTE ]&lt;/p&gt;

&lt;p&gt;[ REJECT ]&lt;/p&gt;

&lt;p&gt;Remediation runs through a controlled execution layer rather than directly modifying production infrastructure.&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%2Fkdhpvrdvgq7xjsytysjk.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkdhpvrdvgq7xjsytysjk.png" alt=" " width="602" height="101"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Verifying Recovery Instead of Assuming It
&lt;/h2&gt;

&lt;p&gt;Executing a remediation command does not prove that an incident is fixed.&lt;/p&gt;

&lt;p&gt;Resilify.AI therefore checks the telemetry after remediation.&lt;/p&gt;

&lt;p&gt;A successful recovery should be visible in the system:&lt;/p&gt;

&lt;p&gt;Error Rate&lt;/p&gt;

&lt;p&gt;38.7% → 24.2% → 8.1% → 1.4% → 0.3%&lt;/p&gt;

&lt;p&gt;P99 Latency&lt;/p&gt;

&lt;p&gt;4820 ms → 45 ms&lt;/p&gt;

&lt;p&gt;Health probes are also checked before the incident is marked as recovered.&lt;/p&gt;

&lt;p&gt;The final state becomes:&lt;/p&gt;

&lt;p&gt;RECOVERY VERIFIED&lt;/p&gt;

&lt;p&gt;This gives the system an actual outcome to remember.&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%2F00oeoywauw3f57uo4hs2.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F00oeoywauw3f57uo4hs2.png" alt=" " width="602" height="903"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing the Loop
&lt;/h2&gt;

&lt;p&gt;The post-mortem captures what happened and what the system learned.&lt;/p&gt;

&lt;p&gt;Lesson:&lt;/p&gt;

&lt;p&gt;High database connection utilization combined with increased latency after deployment is a strong indicator of connection pool exhaustion.&lt;/p&gt;

&lt;p&gt;The post-mortem is then retained in Hindsight.&lt;/p&gt;

&lt;p&gt;The code path that closes the loop is conceptually:&lt;/p&gt;

&lt;p&gt;if (this.mode === 'cloud' &amp;amp;&amp;amp; this.apiKey) {&lt;br&gt;
  try {&lt;br&gt;
    const response = await fetch(&lt;br&gt;
      &lt;code&gt;${this.apiUrl}/v1/banks/${bank}/memories&lt;/code&gt;,&lt;br&gt;
      {&lt;br&gt;
        method: 'POST',&lt;br&gt;
        headers: {&lt;br&gt;
          'Content-Type': 'application/json',&lt;br&gt;
          'Authorization': &lt;code&gt;Bearer ${this.apiKey}&lt;/code&gt;&lt;br&gt;
        },&lt;br&gt;
        body: JSON.stringify({&lt;br&gt;
          content,&lt;br&gt;
          metadata&lt;br&gt;
        })&lt;br&gt;
      }&lt;br&gt;
    );&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;if (response.ok) {
  const cloudData = await response.json();

  this.saveLocalMemory(
    bank,
    content,
    metadata
  );

  return {
    ...cloudData,
    mode: 'cloud'
  };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;} catch (err) {&lt;br&gt;
    // fallback handling&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The important idea is that the resolution becomes part of the agent's future context.&lt;/p&gt;

&lt;p&gt;The next time a similar incident occurs, this experience becomes available during investigation.&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%2F4kc9idqgg0gp9egr43fy.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F4kc9idqgg0gp9egr43fy.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Complete Learning Loop
&lt;/h2&gt;

&lt;p&gt;The resulting architecture is more than:&lt;/p&gt;

&lt;p&gt;Incident → LLM → Answer&lt;/p&gt;

&lt;p&gt;It becomes:&lt;/p&gt;

&lt;p&gt;Remember → Investigate → Act → Verify → Learn&lt;/p&gt;

&lt;p&gt;The system therefore treats every resolved incident as another piece of operational experience.&lt;/p&gt;

&lt;p&gt;That is the part of the design I found most interesting.&lt;/p&gt;

&lt;p&gt;The agent does not become useful simply because it can generate troubleshooting text.&lt;/p&gt;

&lt;p&gt;It becomes more useful when previous outcomes influence future investigations.&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%2Fs1ptt1nhbpvf88kqupaz.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fs1ptt1nhbpvf88kqupaz.png" alt=" " width="602" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;Memory is useful only when it changes decisions&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It is easy to build a system that retrieves old information.&lt;/p&gt;

&lt;p&gt;The harder and more important question is whether that information changes the current recommendation.&lt;/p&gt;

&lt;p&gt;For Resilify.AI, historical incidents are useful only when they provide evidence that affects the current investigation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Retrieval and reasoning are different problems&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Finding a similar incident and deciding what that incident means are not the same operation.&lt;/p&gt;

&lt;p&gt;That is why the system separates historical retrieval from reasoning over historical experience.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Evidence makes AI recommendations easier to trust&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of presenting a diagnosis as certain, I show the evidence supporting a likely root cause.&lt;/p&gt;

&lt;p&gt;This gives an engineer something concrete to inspect before approving remediation.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The outcome is part of the memory&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A remediation without an outcome is incomplete.&lt;/p&gt;

&lt;p&gt;The system needs to know whether the recommended action actually worked.&lt;/p&gt;

&lt;p&gt;That outcome is what makes the historical incident useful to future investigations.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The best memory systems close the loop&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The most important architectural decision was connecting the beginning and end of the incident lifecycle.&lt;/p&gt;

&lt;p&gt;The system therefore has a simple mechanism for accumulating operational experience over time.&lt;/p&gt;

&lt;h2&gt;
  
  
  LIMITATION
&lt;/h2&gt;

&lt;p&gt;One limitation I ran into was that persistent memory is only useful when the retrieved experience is relevant to the current incident.&lt;/p&gt;

&lt;p&gt;A historical incident can provide strong supporting evidence, but it cannot replace current telemetry.&lt;/p&gt;

&lt;p&gt;That is why Resilify.AI treats historical memory as evidence for investigation rather than as an unquestionable diagnosis.&lt;/p&gt;

&lt;p&gt;The current incident still has to be verified through its own telemetry and recovery checks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Building Resilify.AI changed how I think about AI agents for operational systems.&lt;/p&gt;

&lt;p&gt;A language model can already explain logs, suggest commands, and generate troubleshooting steps.&lt;/p&gt;

&lt;p&gt;The harder problem is giving it useful organizational experience.&lt;/p&gt;

&lt;p&gt;With Hindsight, a resolved incident can become persistent memory that is available during future investigations.&lt;/p&gt;

&lt;p&gt;That changes the role of the agent from a system that simply answers questions into a system that can use the organization's previous experience.&lt;/p&gt;

&lt;p&gt;The core loop is simple:&lt;/p&gt;

&lt;p&gt;Remember.&lt;/p&gt;

&lt;p&gt;Investigate.&lt;/p&gt;

&lt;p&gt;Act.&lt;/p&gt;

&lt;p&gt;Verify.&lt;/p&gt;

&lt;p&gt;Learn.&lt;/p&gt;

&lt;p&gt;That is the foundation of Resilify.AI.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Assistance Disclosure
&lt;/h2&gt;

&lt;p&gt;I used AI tools to assist with editing and structuring this article. The project implementation, technical decisions, and results described here are based on my own work.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>devops</category>
      <category>sre</category>
    </item>
  </channel>
</rss>
