<?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: Yelem Venkata Rachika</title>
    <description>The latest articles on DEV Community by Yelem Venkata Rachika (@yelem_venkatarachika_27c).</description>
    <link>https://dev.to/yelem_venkatarachika_27c</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%2F4149808%2Fcbdc438a-74d3-4c14-8b7b-a53ea3efd5b4.png</url>
      <title>DEV Community: Yelem Venkata Rachika</title>
      <link>https://dev.to/yelem_venkatarachika_27c</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yelem_venkatarachika_27c"/>
    <language>en</language>
    <item>
      <title>A restart fixed the incident. Eight minutes later, it was back.</title>
      <dc:creator>Yelem Venkata Rachika</dc:creator>
      <pubDate>Tue, 29 Sep 2026 14:28:23 +0000</pubDate>
      <link>https://dev.to/yelem_venkatarachika_27c/a-restart-fixed-the-incident-eight-minutes-later-it-was-back-4j5a</link>
      <guid>https://dev.to/yelem_venkatarachika_27c/a-restart-fixed-the-incident-eight-minutes-later-it-was-back-4j5a</guid>
      <description>&lt;p&gt;A restart fixed the incident. Eight minutes later, it was back. Remembering Operational Anti-Patterns and Failed Fixes using Hindsight&lt;/p&gt;

&lt;p&gt;If you have spent time on call in a complex microservice environment, you have lived this exact sequence. An alert fires, error rates surge, and someone attempts a quick service restart. The metrics momentarily dip back into the green, everyone relaxes on the incident call, and ten minutes later the error rate spikes right back up to 18%.&lt;/p&gt;

&lt;p&gt;Most AI incident tools and runbook automation systems are obsessed with recording successful solutions. When an incident closes, they store the final patch or configuration fix. But in real-world operations, remembering what &lt;strong&gt;failed&lt;/strong&gt; during troubleshooting is just as valuable as remembering what worked.&lt;/p&gt;

&lt;p&gt;When building DeployLens for our NovaCart production environment, we designed the memory architecture to explicitly capture operational anti-patterns using the [Hindsight agent memory SDK]@code.in (&lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;https://github.com/vectorize-io/hindsight&lt;/a&gt;). &lt;/p&gt;

&lt;p&gt;Here is how we store, format, and recall failed fix attempts so engineering teams stop repeating the same troubleshooting mistakes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem with Success-Only Memory
&lt;/h2&gt;

&lt;p&gt;When an AI investigation agent only remembers successful outcomes, it suffers from a critical blind spot: it cannot warn engineers away from plausible-sounding workarounds that have repeatedly failed in the past.&lt;/p&gt;

&lt;p&gt;Consider a common scenario: &lt;code&gt;checkout-api&lt;/code&gt; latency spikes due to downstream Redis connection pool exhaustion after a release of &lt;code&gt;payment-service&lt;/code&gt;. To a generic troubleshooting assistant, restarting &lt;code&gt;checkout-api&lt;/code&gt; sounds perfectly reasonable. Restarting worker processes clears transient memory and flushes stale socket connections. &lt;/p&gt;

&lt;p&gt;However, if three previous SREs already tried restarting &lt;code&gt;checkout-api&lt;/code&gt; during identical past outages and found it provided only 8 minutes of temporary relief before connection queues filled up again, that knowledge is vital. If that experience isn't captured, every new engineer on call will repeat the exact same ineffective restart step.&lt;/p&gt;

&lt;p&gt;Using &lt;a href="https://vectorize.io/what-is-agent-memory" rel="noopener noreferrer"&gt;Vectorize persistent agent memory&lt;/a&gt;, DeployLens treats failed troubleshooting attempts as first-class memory units.&lt;/p&gt;

&lt;h2&gt;
  
  
  Formatting Failure into Anti-Pattern Memories
&lt;/h2&gt;

&lt;p&gt;To turn failed engineering actions into usable memories, we created dedicated formatting rules inside &lt;code&gt;MemoryFormatter&lt;/code&gt; (&lt;code&gt;backend/app/memory/memory_formatter.py&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Here is how we convert failed troubleshooting actions into semantic memories:&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="nd"&gt;@staticmethod&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;format_investigation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;incident_id&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;service_name&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;engineer&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;action&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;result&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;outcome_type&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;str&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;outcome_type&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FAILED_TEMPORARY&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="s"&gt;FAILED_NO_EFFECT&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;return &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;During [&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;incident_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;] on &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;service_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, engineer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;engineer&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; attempted action: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;action&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Result: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. Outcome: This action WAS NOT a permanent fix (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;outcome_type&lt;/span&gt;&lt;span class="si"&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="k"&gt;else&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;return &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;During [&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;incident_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;] on &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;service_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, engineer &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;engineer&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; performed action: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;action&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Result: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;. Outcome: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;outcome_type&lt;/span&gt;&lt;span class="si"&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why This Matters
&lt;/h3&gt;

&lt;p&gt;Notice the structure of the generated text string. We explicitly include phrases like &lt;code&gt;"WAS NOT a permanent fix"&lt;/code&gt; and append outcome types such as &lt;code&gt;FAILED_TEMPORARY&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;When Hindsight indexes these strings into its vector space, queries searching for historical fixes on &lt;code&gt;checkout-api&lt;/code&gt; retrieve these failure memories alongside resolutions. The language choices ensure the LLM reasoning agent understands that the action was attempted but failed to solve the root problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Writing Outcome Memories to Hindsight
&lt;/h2&gt;

&lt;p&gt;When an engineer resolves an incident in DeployLens, they submit a postmortem form containing both the confirmed root cause and any failed fix attempts. &lt;/p&gt;

&lt;p&gt;Inside &lt;code&gt;backend/app/memory/memory_service.py&lt;/code&gt;, &lt;code&gt;store_incident_outcome&lt;/code&gt; processes these failed attempts and writes them to the Hindsight memory bank:&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;store_incident_outcome&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;incident_id&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;service_name&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;root_cause&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;successful_fix&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;failed_attempts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&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;timestamp&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&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;str&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;ts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;timestamp&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;utcnow&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%Y-%m-%d %H:%M&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MemoryFormatter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format_resolution&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;incident_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;service_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;root_cause&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;successful_fix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;failed_attempts&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;meta&lt;/span&gt; &lt;span class="o"&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;service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;service_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;incident_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;incident_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_type&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="s"&gt;resolution&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="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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SUCCESS&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="n"&gt;mem_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remember_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resolution&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;meta&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resolution&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;service_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;incident_id&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

    &lt;span class="c1"&gt;# Store failed fix memories explicitly if any
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;failed&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;failed_attempts&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;failed_content&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MemoryFormatter&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;format_investigation&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;incident_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;service_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Incident Team&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;failed&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Temporary recovery or no permanent effect&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="s"&gt;FAILED_TEMPORARY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;remember_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;failed_content&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failure&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;service&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;service_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;incident_id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;incident_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;source_type&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="s"&gt;failure&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="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;failure&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;service_name&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;mem_id&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Why This Matters
&lt;/h3&gt;

&lt;p&gt;This function creates two distinct types of records in Hindsight:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A &lt;strong&gt;resolution memory&lt;/strong&gt; capturing the successful fix.&lt;/li&gt;
&lt;li&gt;Individual &lt;strong&gt;failure memories&lt;/strong&gt; for every failed attempt submitted by the SRE, tagged explicitly with &lt;code&gt;source_type: "failure"&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;When future incidents occur, Hindsight recall returns both the verified fix and the anti-pattern warnings.&lt;/p&gt;

&lt;h2&gt;
  
  
  Surfacing Anti-Patterns in the User Interface
&lt;/h2&gt;

&lt;p&gt;Storing failed fixes in memory is only half the battle; the UI must present them as explicit warnings so engineers don't overlook them.&lt;/p&gt;

&lt;p&gt;In DeployLens, when Hindsight recalls a failed action pattern, the frontend renders a dedicated &lt;code&gt;FailedFixCard&lt;/code&gt; component displaying:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Previously Attempted Action&lt;/strong&gt;: e.g., &lt;em&gt;"Restarted checkout-api service instance 3 times"&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Historical Outcome&lt;/strong&gt;: &lt;em&gt;"0/3 Permanent Resolutions"&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DeployLens Memory Warning&lt;/strong&gt;: &lt;em&gt;"This action historically provided temporary relief (5-8 mins) but did NOT permanently resolve the root cause."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Before vs After: Success-Only Memory vs Anti-Pattern Memory
&lt;/h2&gt;

&lt;p&gt;Here is how incident investigation changes when your memory system retains failed troubleshooting attempts.&lt;/p&gt;

&lt;h3&gt;
  
  
  WITHOUT FAILED-FIX MEMORY
&lt;/h3&gt;

&lt;p&gt;During active incident &lt;code&gt;INC-2051&lt;/code&gt; (Checkout API Error Rate Spike):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Telemetry shows HTTP 500 errors at 18.4% and Redis timeout warnings.&lt;/li&gt;
&lt;li&gt;The agent searches past records and finds that &lt;code&gt;checkout-api&lt;/code&gt; had high latency two weeks ago.&lt;/li&gt;
&lt;li&gt;Because failed troubleshooting steps weren't recorded, the agent suggests: &lt;em&gt;"Try restarting the &lt;code&gt;checkout-api&lt;/code&gt; pods to restore connection pools."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The engineer restarts the service. Errors disappear for 7 minutes, then return to 18.4%. &lt;strong&gt;Time wasted: 15 minutes.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  WITH HINDSIGHT FAILED-FIX MEMORY
&lt;/h3&gt;

&lt;p&gt;With anti-pattern indexing enabled via &lt;a href="https://hindsight.vectorize.io/" rel="noopener noreferrer"&gt;Hindsight agent memory documentation&lt;/a&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Telemetry shows HTTP 500 errors at 18.4% and Redis timeout warnings.&lt;/li&gt;
&lt;li&gt;Hindsight recalls &lt;code&gt;INC-1042&lt;/code&gt;: &lt;em&gt;"Restarting checkout-api was attempted 3 times and provided only 8 minutes of temporary relief."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;DeployLens displays an explicit warning: &lt;strong&gt;"DO NOT RESTART CHECKOUT-API."&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;DeployLens directs the engineer to the verified fix: &lt;em&gt;"Increase &lt;code&gt;PAYMENT_REDIS_POOL_SIZE&lt;/code&gt; from 20 to 50 in &lt;code&gt;payment-service&lt;/code&gt; configuration."&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The engineer applies the config change. Errors drop to &amp;lt;0.1% permanently. &lt;strong&gt;Time to resolution: 4 minutes.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Tradeoffs and Limitations
&lt;/h2&gt;

&lt;p&gt;Capturing failed fix attempts introduces specific operational tradeoffs:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Postmortem Form Discipline&lt;/strong&gt;: Failure memories rely on engineers filling out the "Failed Fix Attempts" field when closing an incident. If SREs skip this field during resolution, anti-pattern memory cannot accumulate.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;False Equivalency Risk&lt;/strong&gt;: An action that failed under one root cause might be the correct resolution for a different root cause. We mitigate this by attaching service tags and symptom metadata to every failure memory unit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Over-reliance on Historical Warnings&lt;/strong&gt;: Engineers must balance anti-pattern warnings with active telemetry inspection to ensure novel failures are not misdiagnosed based solely on past occurrences.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Practical Lessons for Engineers
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Treat Failures as Assets&lt;/strong&gt;: Record what didn't work during an outage. Ineffective actions are valuable organizational anti-patterns.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tag Failure Outcomes Explicitly&lt;/strong&gt;: Use outcome markers like &lt;code&gt;FAILED_TEMPORARY&lt;/code&gt; when writing memory units to Hindsight.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Warn Prominently in the UI&lt;/strong&gt;: Display anti-patterns with clear visual warnings so engineers don't repeat ineffective workarounds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Link Failures to Root Causes&lt;/strong&gt;: Ensure failure memories retain symptom and service context to prevent false positive warnings.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Differentiate Temporary Relief from Root Cause Fixes&lt;/strong&gt;: Explicitly distinguish workarounds that lower error rates briefly from fixes that restore long-term stability.&lt;/li&gt;
&lt;/ol&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%2Fvn4elqxxjy7jzjsx6qd9.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%2Fvn4elqxxjy7jzjsx6qd9.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;br&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%2Fnpk1ccsft2z7vxnk6731.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%2Fnpk1ccsft2z7vxnk6731.png" alt=" " width="799" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>hindersight</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
