<?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: indira punugoti</title>
    <description>The latest articles on DEV Community by indira punugoti (@indira_punugoti).</description>
    <link>https://dev.to/indira_punugoti</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%2F4149277%2Feb6d1fbf-b9df-46b9-a547-c0dbebf34f09.png</url>
      <title>DEV Community: indira punugoti</title>
      <link>https://dev.to/indira_punugoti</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/indira_punugoti"/>
    <language>en</language>
    <item>
      <title>I Stopped Treating Incident Similarity as an Answer</title>
      <dc:creator>indira punugoti</dc:creator>
      <pubDate>Tue, 29 Sep 2026 09:55:20 +0000</pubDate>
      <link>https://dev.to/indira_punugoti/i-stopped-treating-incident-similarity-as-an-answer-4dhi</link>
      <guid>https://dev.to/indira_punugoti/i-stopped-treating-incident-similarity-as-an-answer-4dhi</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Finding a similar incident is easy. Deciding whether that incident is actually relevant to the current outage is the harder engineering problem.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When I built &lt;strong&gt;IncidentMind&lt;/strong&gt;, I initially thought the most important operation would be memory retrieval: give Hindsight the current incident, retrieve similar incidents, and pass them to the model.&lt;/p&gt;

&lt;p&gt;That worked as a starting point, but it exposed a more important problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two incidents can look similar at the symptom level and still require completely different responses.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I designed the analysis path around that distinction:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hindsight Recall → Hindsight Reflect → LLM Reasoning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Recall finds historical experience. Reflect compares that experience with the current incident. The language model then uses the comparison to produce a structured investigation path.&lt;/p&gt;

&lt;p&gt;That separation became one of the most important design decisions in the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍 Similar Symptoms Do Not Mean the Same Cause
&lt;/h2&gt;

&lt;p&gt;Consider two payment incidents.&lt;/p&gt;

&lt;p&gt;The first produced &lt;code&gt;503&lt;/code&gt; errors during a traffic spike because database connections were exhausted. The resolution involved increasing the database pool and restarting affected nodes.&lt;/p&gt;

&lt;p&gt;The second also produced failures in the payment API, but the root cause was &lt;strong&gt;upstream payment-provider latency&lt;/strong&gt;. The appropriate response was related to the external provider and circuit-breaking behavior rather than database capacity.&lt;/p&gt;

&lt;p&gt;A similarity search can reasonably retrieve both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That is useful, but it is not enough.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If an incident agent simply copied the resolution from the nearest historical incident, memory would become a source of dangerous confidence.&lt;/p&gt;

&lt;p&gt;I wanted historical memory to be &lt;strong&gt;evidence for reasoning rather than a replacement for reasoning&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 The Three-Stage Analysis Path
&lt;/h2&gt;

&lt;p&gt;The analysis pipeline is deliberately explicit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Current Incident
       |
       v
Hindsight RECALL
       |
       v
Historical Experiences
       |
       v
Hindsight REFLECT
       |
       v
Comparison &amp;amp; Differences
       |
       v
LLM Reasoning
       |
       v
Investigation Recommendation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The responsibilities are separated:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Stage&lt;/th&gt;
&lt;th&gt;Responsibility&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;RECALL&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Retrieve relevant organizational experiences&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;REFLECT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Compare historical experiences with the current incident&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;LLM Reasoning&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Turn available evidence into an investigation path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Engineer&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Evaluate the recommendation and make the final decision&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This separation also makes the system easier to debug.&lt;/p&gt;

&lt;p&gt;If a recommendation looks wrong, I can ask three separate questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Did Recall retrieve the right experiences?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Did Reflect distinguish the important differences?&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Did the final reasoning use that evidence correctly?&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Without those boundaries, every bad recommendation would simply look like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The AI got it wrong.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🔎 Recall Is Intentionally Broad
&lt;/h2&gt;

&lt;p&gt;The Recall query uses the current incident's actual context:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`Service: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;. Title: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;. Symptoms: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;symptoms&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;.
Find past engineering incidents with similar service, symptoms,
root causes, decisions, and successful fixes.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;recallResult&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;client&lt;/span&gt;&lt;span class="o"&gt;!&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="k"&gt;this&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;bankId&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;budget&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;mid&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I want &lt;strong&gt;Recall to retrieve relevant experiences&lt;/strong&gt;, not make the final decision.&lt;/p&gt;

&lt;p&gt;The result can contain several historical incidents:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;strong matches&lt;/li&gt;
&lt;li&gt;partial matches&lt;/li&gt;
&lt;li&gt;useful contrasts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last category matters.&lt;/p&gt;

&lt;p&gt;A historical incident does not have to be a direct match to be useful. Sometimes the most valuable memory is the one that &lt;strong&gt;looks similar initially but has a different root cause&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧩 Reflect Turns Retrieval Into Comparison
&lt;/h2&gt;

&lt;p&gt;The Reflect step asks Hindsight to reason over the current incident and recalled memories:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;`Current incident: "&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;incident&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;title&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;" on service "&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;incident&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;service&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;".
Symptoms: "&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;incident&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;symptoms&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;".
Recalled Historical Memories from Hindsight:
&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;recalledSummary&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;

Analyze and compare the current incident against the recalled historical memories:
1. Identify relevant historical patterns and key similarities.
2. Note important differences between past incidents and current symptoms.
3. Highlight which past resolutions apply and which should not be blindly reused.
4. Recommend prioritized next investigation steps based on organizational memory.`&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The instruction &lt;strong&gt;not to blindly reuse a historical resolution&lt;/strong&gt; is intentional.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A memory system should preserve experience without turning experience into a rigid runbook.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The result is a useful middle layer between raw retrieval and final generation.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤖 The Language Model Gets Evidence, Not Just a Prompt
&lt;/h2&gt;

&lt;p&gt;After Recall and Reflect, the current telemetry, historical matches, and reflection are provided to the reasoning layer.&lt;/p&gt;

&lt;p&gt;That gives the model a much richer input than a generic question such as:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“What is wrong with this incident?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The model can reason over:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;current symptoms&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;current service and environment&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;severity&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;historical root causes&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;previous resolutions&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;differences between incidents&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;recommended investigation areas&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The output is then represented as structured incident analysis rather than simply generating a free-form chatbot response.&lt;/p&gt;

&lt;p&gt;That matters during an outage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An engineer needs to know what to investigate next, not just read a convincing paragraph.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 A Concrete Example
&lt;/h2&gt;

&lt;p&gt;Suppose a new production incident reports:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Service: Payment API
Severity: SEV-1

Symptoms:
- 503 responses increasing
- latency elevated
- database pool at 100%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recall can surface a previous payment incident involving &lt;strong&gt;connection-pool exhaustion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It may also surface another payment incident involving an &lt;strong&gt;external provider&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Reflect then has an important job:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Compare the evidence rather than choosing the first similar incident.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the current telemetry shows database pool saturation and no corresponding upstream-provider signal, the database-related incident becomes more relevant.&lt;/p&gt;

&lt;p&gt;If the database looks healthy but upstream calls are timing out, the historical provider incident becomes more useful.&lt;/p&gt;

&lt;p&gt;The system therefore does not need to pretend that &lt;strong&gt;one historical memory is always correct&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛡️ This Also Improves Failure Behavior
&lt;/h2&gt;

&lt;p&gt;One of my strongest requirements became:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;An empty Recall result must remain empty.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If Hindsight has no relevant historical experience, IncidentMind should say so.&lt;/p&gt;

&lt;p&gt;I deliberately removed fallback behavior that silently injected local historical incidents whenever Recall returned no matches.&lt;/p&gt;

&lt;p&gt;That shortcut made the interface look more intelligent, but it undermined the central claim of the system.&lt;/p&gt;

&lt;p&gt;Now Hindsight is the source of truth for recalled operational memory.&lt;/p&gt;

&lt;p&gt;The application can therefore represent two honest states:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Relevant Memory Found
        |
        v
Compare + Reason
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;No Relevant Memory Found
        |
        v
Reason From Current Evidence
        |
        v
Report Limited Historical Context
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;This is more useful than fabricating certainty.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚖️ Before vs. After
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Before the Separation
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Current Incident
      ↓
Find Similar Incident
      ↓
Reuse Its Fix
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  After Separating Recall, Reflect, and Reasoning
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Current Incident
      ↓
Recall Historical Experience
      ↓
Reflect on Similarities &amp;amp; Differences
      ↓
Reason From Current + Historical Evidence
      ↓
Recommend Investigation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The diagram is only slightly different.&lt;/p&gt;

&lt;p&gt;The behavior is significantly different.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Historical similarity becomes evidence instead of an automatic answer.&lt;/strong&gt;&lt;/p&gt;

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

&lt;h3&gt;
  
  
  1. Similarity Is a Retrieval Mechanism, Not a Decision Mechanism
&lt;/h3&gt;

&lt;p&gt;The nearest historical incident is not automatically the right incident.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retrieval should narrow the search space; reasoning still has to determine applicability.&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Contradictory Memories Are Useful
&lt;/h3&gt;

&lt;p&gt;Two incidents with similar symptoms but different root causes can teach the system what evidence separates them.&lt;/p&gt;

&lt;p&gt;A memory system should preserve those differences rather than flattening everything into:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Similar incident.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  3. Reflection Deserves Its Own Boundary
&lt;/h3&gt;

&lt;p&gt;Putting comparison into a separate step made the architecture easier to understand and debug.&lt;/p&gt;

&lt;p&gt;It also made Hindsight more than simply a storage layer.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Empty Memory Is a Valid Result
&lt;/h3&gt;

&lt;p&gt;A system that admits it has no relevant history is more trustworthy than one that always produces a historical match.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Human Judgment Remains Important
&lt;/h3&gt;

&lt;p&gt;IncidentMind recommends investigation paths.&lt;/p&gt;

&lt;p&gt;It does not automatically change production systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Historical experience informs the responder; it does not replace the responder.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Project and References
&lt;/h2&gt;

&lt;p&gt;The complete &lt;strong&gt;IncidentMind&lt;/strong&gt; project is available in the &lt;a href="https://github.com/gunja-ramana/incidentmind" rel="noopener noreferrer"&gt;IncidentMind GitHub Repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For implementation details and background:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;Hindsight GitHub Repository&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hindsight.vectorize.io/" rel="noopener noreferrer"&gt;Hindsight Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://vectorize.io/what-is-agent-memory" rel="noopener noreferrer"&gt;Vectorize — What Is Agent Memory?&lt;/a&gt;
### Architecture&lt;/li&gt;
&lt;/ul&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%2Fr06yv21ajn0g8uu64w0h.jpeg" 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%2Fr06yv21ajn0g8uu64w0h.jpeg" alt="IncidentMind Architecture" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  UI
&lt;/h3&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%2Fgntzisid93fj5imomzzf.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%2Fgntzisid93fj5imomzzf.png" alt="IncidentMind Screenshot" width="800" height="428"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  recall
&lt;/h3&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%2Ffutqztiecc1iuot5m5ih.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%2Ffutqztiecc1iuot5m5ih.png" alt="Hindsight Recall Screenshot" width="799" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  retain
&lt;/h3&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%2F09g3xsd5mitsexyr2wag.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%2F09g3xsd5mitsexyr2wag.png" alt="Hindsight Retain Screenshot" width="799" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
