<?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: Zoha Fatima</title>
    <description>The latest articles on DEV Community by Zoha Fatima (@zoha_fatima_5ee65bce2eb9b).</description>
    <link>https://dev.to/zoha_fatima_5ee65bce2eb9b</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%2F4148637%2F05143767-ef15-44d4-a9f1-9ce8e3936da2.png</url>
      <title>DEV Community: Zoha Fatima</title>
      <link>https://dev.to/zoha_fatima_5ee65bce2eb9b</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zoha_fatima_5ee65bce2eb9b"/>
    <language>en</language>
    <item>
      <title>How Relay Uses Memory to Stop Repeating Failed Support Steps</title>
      <dc:creator>Zoha Fatima</dc:creator>
      <pubDate>Tue, 29 Sep 2026 05:35:14 +0000</pubDate>
      <link>https://dev.to/zoha_fatima_5ee65bce2eb9b/how-relay-uses-memory-to-stop-repeating-failed-support-steps-1lhf</link>
      <guid>https://dev.to/zoha_fatima_5ee65bce2eb9b/how-relay-uses-memory-to-stop-repeating-failed-support-steps-1lhf</guid>
      <description>&lt;p&gt;How Relay Uses Memory to Stop Repeating Failed Support Steps&lt;/p&gt;

&lt;p&gt;A support conversation can contain a surprising amount of useful information.&lt;/p&gt;

&lt;p&gt;The customer explains a problem. The agent suggests a solution. The customer tries it. Maybe it works. Maybe it fails. Maybe it works temporarily.&lt;/p&gt;

&lt;p&gt;But if the next interaction starts without that information, the agent is effectively starting over.&lt;/p&gt;

&lt;p&gt;While building Relay, we focused on one question:&lt;/p&gt;

&lt;p&gt;«What if a support agent could remember the outcome of previous troubleshooting attempts and use those outcomes in future conversations?»&lt;/p&gt;

&lt;p&gt;That became the central role of memory in Relay.&lt;/p&gt;




&lt;p&gt;🧠 The difference between remembering a conversation and remembering a case&lt;/p&gt;

&lt;p&gt;Consider a simple support problem.&lt;/p&gt;

&lt;p&gt;A customer says:&lt;/p&gt;

&lt;p&gt;«“My Wi-Fi keeps disconnecting.”»&lt;/p&gt;

&lt;p&gt;The agent suggests restarting the router.&lt;/p&gt;

&lt;p&gt;The customer tries it and replies:&lt;/p&gt;

&lt;p&gt;«“It works, but only for a little while.”»&lt;/p&gt;

&lt;p&gt;There are two ways an AI system could remember this interaction.&lt;/p&gt;

&lt;p&gt;Conversational memory&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer said Wi-Fi disconnects.&lt;/li&gt;
&lt;li&gt;Agent suggested restarting router.&lt;/li&gt;
&lt;li&gt;Customer said it worked temporarily.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Case memory&lt;/p&gt;

&lt;p&gt;Problem:&lt;br&gt;
Wi-Fi disconnecting&lt;/p&gt;

&lt;p&gt;Attempt:&lt;br&gt;
Restart router&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
Temporary improvement&lt;/p&gt;

&lt;p&gt;The second representation is much more useful for troubleshooting.&lt;/p&gt;

&lt;p&gt;It captures not only what was said, but what was tried and what happened afterward.&lt;/p&gt;

&lt;p&gt;That is what Relay is designed around.&lt;/p&gt;




&lt;p&gt;🔄 Why repeating solutions is a real problem&lt;/p&gt;

&lt;p&gt;Troubleshooting usually follows a process of elimination.&lt;/p&gt;

&lt;p&gt;You try one thing.&lt;/p&gt;

&lt;p&gt;If it doesn't work, you try something else.&lt;/p&gt;

&lt;p&gt;If it works temporarily, that is also important information.&lt;/p&gt;

&lt;p&gt;Eventually, you narrow down the possible causes.&lt;/p&gt;

&lt;p&gt;An AI support agent without persistent memory can lose that progress between interactions.&lt;/p&gt;

&lt;p&gt;The customer may return later and receive the same suggestion they already tried.&lt;/p&gt;

&lt;p&gt;From the system's perspective, that suggestion may look reasonable.&lt;/p&gt;

&lt;p&gt;From the customer's perspective, it is wasted time.&lt;/p&gt;

&lt;p&gt;Relay attempts to preserve that troubleshooting progress.&lt;/p&gt;




&lt;p&gt;🧩 How Hindsight fits into Relay&lt;/p&gt;

&lt;p&gt;We use Hindsight as the memory layer behind Relay.&lt;/p&gt;

&lt;p&gt;The basic idea is:&lt;/p&gt;

&lt;p&gt;Support interaction&lt;br&gt;
        ↓&lt;br&gt;
      Retain&lt;br&gt;
        ↓&lt;br&gt;
Persistent memory&lt;br&gt;
        ↓&lt;br&gt;
      Recall&lt;br&gt;
        ↓&lt;br&gt;
Relevant previous cases&lt;br&gt;
        ↓&lt;br&gt;
      Reason&lt;br&gt;
        ↓&lt;br&gt;
Next support action&lt;/p&gt;

&lt;p&gt;This makes memory part of the decision-making process rather than simply an archive.&lt;/p&gt;

&lt;p&gt;When a new support request arrives, Relay can retrieve information that is relevant to the current prob&lt;/p&gt;

&lt;p&gt;The agent can then use that information when deciding what to do next.&lt;/p&gt;




&lt;p&gt;💡 The interesting part: remembering failure&lt;/p&gt;

&lt;p&gt;One of the most useful ideas in Relay is that failed or incomplete attempts are still worth remembering.&lt;/p&gt;

&lt;p&gt;Imagine this sequence:&lt;/p&gt;

&lt;p&gt;Router restart&lt;br&gt;
→ Temporary improvement&lt;/p&gt;

&lt;p&gt;Network reset&lt;br&gt;
→ No improvement&lt;/p&gt;

&lt;p&gt;Driver update&lt;br&gt;
→ Problem solved&lt;/p&gt;

&lt;p&gt;A simple chatbot might focus primarily on the successful answer.&lt;/p&gt;

&lt;p&gt;Relay needs to remember the entire sequence.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because if the problem happens again, the previous failures help narrow the search.&lt;/p&gt;

&lt;p&gt;The agent shouldn't blindly return to the beginning.&lt;/p&gt;

&lt;p&gt;It already has evidence.&lt;/p&gt;




&lt;p&gt;🔁 A later conversation changes the behavior&lt;/p&gt;

&lt;p&gt;Now imagine the customer returns several days later.&lt;/p&gt;

&lt;p&gt;They describe the same Wi-Fi problem.&lt;/p&gt;

&lt;p&gt;Relay recalls the previous case.&lt;/p&gt;

&lt;p&gt;Instead of immediately recommending the router restart again, it can recognize:&lt;/p&gt;

&lt;p&gt;Router restart&lt;br&gt;
→ Already attempted&lt;br&gt;
→ Only temporary&lt;/p&gt;

&lt;p&gt;Driver update&lt;br&gt;
→ Previously resolved the issue&lt;/p&gt;

&lt;p&gt;That memory changes the next interaction.&lt;/p&gt;

&lt;p&gt;This is the behavior we wanted to demonstrate with Hindsight.&lt;/p&gt;

&lt;p&gt;The important result isn't simply that Relay can retrieve an old message.&lt;/p&gt;

&lt;p&gt;It's that retrieved memory changes what the agent does.&lt;/p&gt;




&lt;p&gt;♻️ Building a learning loop&lt;/p&gt;

&lt;p&gt;We designed Relay around a simple feedback loop.&lt;/p&gt;

&lt;p&gt;Receive problem&lt;br&gt;
      ↓&lt;br&gt;
Recall relevant history&lt;br&gt;
      ↓&lt;br&gt;
Choose troubleshooting action&lt;br&gt;
      ↓&lt;br&gt;
Get outcome&lt;br&gt;
      ↓&lt;br&gt;
Store outcome&lt;br&gt;
      ↓&lt;br&gt;
Use it in future interactions&lt;/p&gt;

&lt;p&gt;Every completed troubleshooting step can add another piece of information to the case.&lt;/p&gt;

&lt;p&gt;Over multiple interactions, the agent can therefore build a more useful history.&lt;/p&gt;

&lt;p&gt;This also gives the system a natural way to distinguish between different outcomes:&lt;/p&gt;

&lt;p&gt;FAILED&lt;br&gt;
TEMPORARY&lt;br&gt;
SUCCESSFUL&lt;br&gt;
ESCALATED&lt;/p&gt;

&lt;p&gt;The exact outcome matters because each one should influence future decisions differently.&lt;/p&gt;




&lt;p&gt;🚨 Escalation should also use memory&lt;/p&gt;

&lt;p&gt;Not every support problem should be solved by an AI agent.&lt;/p&gt;

&lt;p&gt;Sometimes the useful troubleshooting options have already been exhausted.&lt;/p&gt;

&lt;p&gt;That's where Relay's escalation behavior comes in.&lt;/p&gt;

&lt;p&gt;Suppose the customer has already tried several relevant solutions and the problem continues.&lt;/p&gt;

&lt;p&gt;Instead of endlessly producing more generic suggestions, Relay can recognize that continued troubleshooting may not be useful and recommend involving a technician.&lt;/p&gt;

&lt;p&gt;The important part is that the decision is informed by the case history.&lt;/p&gt;

&lt;p&gt;And the escalation itself can become part of the remembered case.&lt;/p&gt;

&lt;p&gt;That creates a complete support history:&lt;/p&gt;

&lt;p&gt;Problem&lt;br&gt;
   ↓&lt;br&gt;
Attempt 1 → temporary&lt;br&gt;
   ↓&lt;br&gt;
Attempt 2 → failed&lt;br&gt;
   ↓&lt;br&gt;
Attempt 3 → failed&lt;br&gt;
   ↓&lt;br&gt;
Escalation → technician&lt;/p&gt;

&lt;p&gt;A future support interaction now has access to that context.&lt;/p&gt;




&lt;p&gt;🎯 Why this makes memory central to the product&lt;/p&gt;

&lt;p&gt;It would be easy to add memory to a chatbot and call it a memory-powered application.&lt;/p&gt;

&lt;p&gt;But that doesn't necessarily make memory useful.&lt;/p&gt;

&lt;p&gt;For Relay, we wanted memory to affect the actual workflow.&lt;/p&gt;

&lt;p&gt;Without memory&lt;/p&gt;

&lt;p&gt;Customer&lt;br&gt;
   ↓&lt;br&gt;
Problem&lt;br&gt;
   ↓&lt;br&gt;
Generic troubleshooting&lt;/p&gt;

&lt;p&gt;With memory&lt;/p&gt;

&lt;p&gt;Customer&lt;br&gt;
   ↓&lt;br&gt;
Problem&lt;br&gt;
   ↓&lt;br&gt;
Previous case history&lt;br&gt;
   ↓&lt;br&gt;
Previous attempts + outcomes&lt;br&gt;
   ↓&lt;br&gt;
More informed troubleshooting&lt;/p&gt;

&lt;p&gt;That difference is the reason Hindsight is central to Relay.&lt;/p&gt;




&lt;p&gt;📚 What I learned&lt;/p&gt;

&lt;p&gt;Memory is only useful when it changes behavior&lt;/p&gt;

&lt;p&gt;The most important question isn't:&lt;/p&gt;

&lt;p&gt;«“Can the agent remember?”»&lt;/p&gt;

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

&lt;p&gt;«“What does the agent do differently because it remembers?”»&lt;/p&gt;

&lt;p&gt;For Relay, the answer is troubleshooting.&lt;/p&gt;

&lt;p&gt;Failed solutions shouldn't disappear&lt;/p&gt;

&lt;p&gt;A failed attempt is still useful because it tells the agent what not to repeat.&lt;/p&gt;

&lt;p&gt;Outcomes matter&lt;/p&gt;

&lt;p&gt;The same action can have different results.&lt;/p&gt;

&lt;p&gt;“Restart router” followed by “problem solved” is different from “restart router” followed by “temporary improvement.”&lt;/p&gt;

&lt;p&gt;The outcome changes the meaning of the memory.&lt;/p&gt;

&lt;p&gt;Good support is cumulative&lt;/p&gt;

&lt;p&gt;A customer shouldn't have to rebuild the same troubleshooting history every time they return.&lt;/p&gt;

&lt;p&gt;A useful support agent should be able to build on previous interactions.&lt;/p&gt;




&lt;p&gt;🚀 The idea behind Relay&lt;/p&gt;

&lt;p&gt;Relay isn't trying to remember every sentence a customer has ever written.&lt;/p&gt;

&lt;p&gt;It is trying to remember what happened during the case.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What was the problem?&lt;/li&gt;
&lt;li&gt;What did we try?&lt;/li&gt;
&lt;li&gt;What happened?&lt;/li&gt;
&lt;li&gt;What worked?&lt;/li&gt;
&lt;li&gt;What didn't?&lt;/li&gt;
&lt;li&gt;And when the customer returns, what can we do differently because we already know those answers?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's the role of memory in Relay.&lt;/p&gt;

&lt;p&gt;«The goal isn't simply for an AI agent to remember the conversation.&lt;/p&gt;

&lt;p&gt;The goal is for it to remember what happened—and use that experience the next time.»&lt;/p&gt;

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