DEV Community

BAVUGARI CHARAN KUMAR
BAVUGARI CHARAN KUMAR

Posted on

I Built an Agent That Remembers What Users Complained About

Introduction

Most product teams collect a lot of feedback.

Customers report bugs.
Support teams receive complaints.
Developers fix issues.
Product managers make decisions.
New releases are deployed.

But there is one problem:

Companies can remember information without actually remembering the context behind it.

A bug may have been fixed six months ago. The developer who worked on it may have moved to another team. A new developer may see a similar complaint and assume that it is a completely new problem.

I wanted to build a system that could connect these pieces of history.

That idea became ReTrace — The AI User Feedback Memory Engine.

Instead of only asking:

"What are customers complaining about?"

ReTrace tries to answer:

"Have we seen this problem before, what did we do about it, who was responsible, and what happened afterward?"

The Problem: Products Forget Their Own History

Consider a simple example.

In March, a customer reports:

"The checkout page freezes when I try to make a payment."

The engineering team investigates it.

From Feedback Dashboard to Product Memory

ReTrace tries to connect the information:

                    New Feedback
                         ↓
            Similar Historical Feedback
                         ↓
                   Previous Bug
                         ↓
                    Previous Fix
                         ↓
                  Product Release
                         ↓
                   Previous Owner
                         ↓
                Current Ownership
                         ↓
                    New Evidence
Enter fullscreen mode Exit fullscreen mode

This gives the product team more context before deciding what to do.

The idea is not to replace the product team.

It is to make the organization's historical information easier to understand.

Why I Needed Long-Term Memory

This is where Hindsight becomes important.

I use Hindsight as the long-term memory layer for ReTrace.

Hindsight provides three important operations:

Retain — store important information in memory.
Recall — retrieve relevant information later.
Reflect — reason over remembered information.

You can learn more about Hindsight from its GitHub repository.

Conceptually, ReTrace works like this:

             Customer feedback
                     ↓
                   RETAIN
                     ↓
            Hindsight Memory
                     ↓
                   RECALL
                     ↓
            Historical information
                     ↓
                  REFLECT
                     ↓
            Historical reasoning
Enter fullscreen mode Exit fullscreen mode

For example, when a new complaint arrives, the system can retain the new feedback.

Later, when we need to investigate it, ReTrace can recall related historical information.

The agent can then reason over the old and new information.

How ReTrace Stores Feedback

A simplified version of retaining feedback looks like this:

from hindsight_client import Hindsight

client = Hindsight("http://localhost:8888")

``feedback = """
Customer reported that the checkout page freezes
when attempting to complete payment.
"""

client.retain(
bank_id="retrace",
content=feedback
)``

The important part here is not just storing the text.

The goal is to create useful long-term memory that can later be searched and connected with other information.

For example, we may eventually have memories about:

                   Customer feedback
                           +
                     Bug reports
                           +
                     Product releases
                           +
                     Previous fixes
                           +
                       Ownership
                           +
                    Product decisions
Enter fullscreen mode Exit fullscreen mode

This is what makes historical reasoning possible.

Detecting Product Déjà Vu

One of the main features of ReTrace is what I call the Déjà Vu Detector.

The question is simple:

"Have we already seen this problem?"

Suppose the system receives:

"The payment page gets stuck after entering card details."

ReTrace searches its memory.

It may find:

                      Current feedback
                             ↓
                 "Payment page gets stuck"

                    Historical feedback
                             ↓
               "Checkout freezes during payment"

                        Previous bug
                             ↓
                          BUG-102

                       Previous fix
                             ↓
                           v1.4

                      Previous owner
                             ↓
                           Priya
Enter fullscreen mode Exit fullscreen mode

Instead of simply saying:

"These two sentences are similar."

the system can provide historical context.

That is much more useful to a product team.

Remembering Ownership

Another part of my current design is tracking who was responsible for an issue or decision.

For example:

Issue:
Checkout payment freeze

Original owner:
Priya

Team:
Payments

Fix:
v1.4

Later, the ownership may change.

                                Priya
                                  ↓
                        moves to another team
                                  ↓
                             Payments issue
                                  ↓
                              new owner
Enter fullscreen mode Exit fullscreen mode

The historical information still exists, but the original context may no longer be directly available from the same person.

This creates an important question:

Should an old decision always be trusted in exactly the same way?

My design explores this through the idea of ownership-based confidence.

Ownership-Based Confidence

This is one of the deeper ideas behind ReTrace.

Imagine the system has the following historical belief:

"The checkout payment problem was fixed."

The system may have:

Statement:
Checkout payment problem was fixed.

Evidence:
v1.4 release

Original owner:
Priya

Confidence:
91%

Now imagine that Priya is no longer responsible for that area.

That does not mean the original decision was wrong.

Instead, ReTrace can treat it as information that may need additional verification if new evidence appears.

Conceptually:

Old decision
↓
Original owner
↓
Owner still responsible?
│
┌─┴─┐
YES NO
│ │
│ ↓
│ Monitor
│ for new
│ evidence
│
Continue using
historical context

This is an important distinction.

The system should not say:

"The old fix is wrong."

It should say:

"The old fix has historical evidence, but new evidence may require verification."

When Old Problems Come Back

Now imagine a new complaint appears:

"Payment screen gets stuck again."

ReTrace can connect it with the historical information:

NEW COMPLAINT
↓
Similar historical issue
↓
Previous fix found
↓
Previous owner found
↓
Ownership changed
↓
New evidence detected
↓
Potential regression

The product team could then see something like:

⚠️ HISTORICAL ISSUE MATCH

Current issue:
Payment screen gets stuck

Related issue:
BUG-102

Previous resolution:
v1.4

Previous owner:
Priya

Current ownership:
Changed

New matching feedback:
3 reports

Suggested action:
Re-verify the previous fix

This is the Product Déjà Vu idea.

The Accountability Ledger

Another planned part of ReTrace is an Accountability Ledger.

Product teams make statements such as:

"Checkout performance has been fixed."

Instead of allowing that statement to disappear into documentation, we can preserve it as a historical claim.

For example:

CLAIM

Statement:
Checkout performance has been fixed.

Person:
Priya

Release:
v2.1

Date:
March 2026

Evidence:
QA testing

Later, ReTrace can compare the claim with new information.

For example:

Claim:
Checkout performance improved

Supporting evidence:
Checkout complaints decreased

New evidence:
Payment failures increased

The system should not automatically decide that the original claim was false.

Instead, it can highlight the conflicting evidence:

Previous product claim may require re-verification.

This makes the system useful for historical investigation rather than simply generating alerts.

Feedback Debt

Another idea in the project is Feedback Debt.

Some customer problems remain unresolved for a long time.

For example:

Month 1 → 12 complaints
Month 2 → 27 complaints
Month 3 → 41 complaints
Month 4 → 63 complaints
Month 5 → 91 complaints

A normal dashboard might simply display:

91 complaints.

ReTrace can provide more context:

Issue:
Checkout freeze

Age:
5 months

Mentions:
234

Status:
Unresolved

Owner:
Unclear

We can also create an estimated impact score.

For example:

Estimated support impact
+

Estimated customer impact

Estimated Feedback Debt

These numbers should be clearly labelled as estimates, not actual financial losses.

The purpose is to help a product team understand how an unresolved issue is accumulating over time

Architecture

What Makes ReTrace Different?

The original idea was simple:

AI that remembers customer feedback.

The direction I am taking it now is broader:

AI that remembers customer feedback together with the product history around it.

That means remembering:

What happened?
↓
When did it happen?
↓
What problem was reported?
↓
What was changed?
↓
Who worked on it?
↓
What did the team believe?
↓
What happened afterward?

The goal is to turn these disconnected records into usable organizational memory.

What I Learned

One of the biggest things I learned while working on this idea is that adding an LLM is not enough.

If the AI only sees the current conversation, it has very little historical context.

The interesting part begins when the system can connect:

Past
↓
Present
↓
People
↓
Decisions
↓
Evidence

I also learned that memory should not simply mean "store everything."

A useful memory system needs to answer:

What information is relevant right now?

This is why the combination of retaining, recalling, and reflecting is important for this project.

What I Want to Build Next

The next steps for ReTrace are to make the memory system more useful for real product workflows.

Some areas I want to explore are:

better historical feedback matching
stronger ownership tracking
product release timelines
automatic detection of repeated issues
evidence-based confidence updates
feedback-debt calculations
a conversational interface for querying product history

For example, eventually a product manager could ask:

"Have we had this problem before?"

And ReTrace could answer with:

Yes.

Similar issue:
BUG-102

First reported:
March 2025

Previous fix:
v1.4

Original owner:
Priya

Related recent feedback:
3 reports

Status:
Requires re-verification

That is the kind of product memory I want to build.

Conclusion

ReTrace started from a simple question:

What if an AI could remember what users complained about?

That question became something bigger:

What if an AI could remember what happened to a product, why decisions were made, who was responsible, and what happened afterward?

With Hindsight providing the long-term memory layer, ReTrace is designed to connect customer feedback with the history surrounding it.

The goal is not simply to store more information.

The goal is to make forgotten product history useful again.

ReTrace doesn't just remember what happened. It connects what happened before with what is happening now.

Learn More

Top comments (0)