<?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: Prasannasri Shanaboina</title>
    <description>The latest articles on DEV Community by Prasannasri Shanaboina (@prasannasri_shanaboina_dc).</description>
    <link>https://dev.to/prasannasri_shanaboina_dc</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%2F4150615%2F3aa1bb7e-ac5a-49f3-9a13-98450602cc25.png</url>
      <title>DEV Community: Prasannasri Shanaboina</title>
      <link>https://dev.to/prasannasri_shanaboina_dc</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/prasannasri_shanaboina_dc"/>
    <language>en</language>
    <item>
      <title>I Let Hindsight Remember Our Deployments. SQLite Keeps It Honest.</title>
      <dc:creator>Prasannasri Shanaboina</dc:creator>
      <pubDate>Tue, 29 Sep 2026 17:37:32 +0000</pubDate>
      <link>https://dev.to/prasannasri_shanaboina_dc/i-let-hindsight-remember-our-deployments-sqlite-keeps-it-honest-4khc</link>
      <guid>https://dev.to/prasannasri_shanaboina_dc/i-let-hindsight-remember-our-deployments-sqlite-keeps-it-honest-4khc</guid>
      <description>&lt;p&gt;The useful part of a deployment agent isn't telling me what a PostgreSQL upgrade is. It's remembering what happened the last time I tried one.&lt;br&gt;
That became the central idea behind DeployMind, a DevOps pipeline agent I built around Hindsight. A developer describes a deployment, the agent recalls relevant deployment experiences, identifies risk, and suggests checks based on what happened before. When the deployment finishes, its outcome becomes another experience the agent can use later.&lt;br&gt;
The interesting engineering problem wasn't getting an agent to remember.&lt;br&gt;
It was deciding what that memory should be allowed to decide.&lt;br&gt;
The problem: deployment knowledge disappears at exactly the wrong time&lt;br&gt;
Teams already have plenty of deployment knowledge.&lt;br&gt;
A failed release gets documented. Someone writes the root cause. Someone records the fix. Maybe there is even a postmortem.&lt;br&gt;
The problem is that this information usually isn't available when the next developer is about to make a similar change.&lt;br&gt;
Suppose a service is moving from PostgreSQL 14 to 16. Somewhere in the team's history, another deployment may already have discovered that the database driver needed to be upgraded first.&lt;br&gt;
That knowledge is valuable.&lt;br&gt;
But a developer shouldn't have to remember the incident number, search a wiki, guess which keywords were used in the postmortem, and hope they found the right document before deploying.&lt;br&gt;
I wanted the deployment workflow itself to ask the question:&lt;br&gt;
Have we seen something like this before, and what happened?&lt;br&gt;
That became DeployMind.&lt;br&gt;
How DeployMind hangs together&lt;br&gt;
I deliberately kept the architecture simple:&lt;br&gt;
DeployMind system architecture: the React frontend sends deployment information to FastAPI, which coordinates structured SQLite records with Hindsight's recall and retain operations.&lt;br&gt;
SQLite stores the structured deployment records: application, version, environment, changes, and outcome.&lt;br&gt;
Hindsight provides the experience-memory layer. &lt;br&gt;
Hindsight GitHub repository: Hindsight.&lt;br&gt;
Hindsight documentation: Hindsight documentation&lt;br&gt;
Vectorize's overview of agent memory: agent memory &lt;br&gt;
I use it to retain deployment experiences and recall relevant experiences when a new deployment is analyzed.&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%2Fkfy0htqcyy1fqd4uerd2.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%2Fkfy0htqcyy1fqd4uerd2.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;png)&lt;/p&gt;

&lt;p&gt;The workflow is essentially:&lt;br&gt;
New deployment&lt;br&gt;
      ↓&lt;br&gt;
Recall previous experiences&lt;br&gt;
      ↓&lt;br&gt;
Compare relevant deployments&lt;br&gt;
      ↓&lt;br&gt;
Generate risk + recommendations&lt;br&gt;
      ↓&lt;br&gt;
Deploy&lt;br&gt;
      ↓&lt;br&gt;
Record outcome&lt;br&gt;
      ↓&lt;br&gt;
Retain the experience&lt;br&gt;
      ↓&lt;br&gt;
Use it in future analyses&lt;/p&gt;

&lt;p&gt;That last step is what changes the system from a static deployment checker into something that can accumulate experience.&lt;br&gt;
If you're unfamiliar with the concept, the Hindsight documentation explains the underlying memory operations, while Vectorize's overview of agent memory provides the broader context.&lt;br&gt;
The decision: let memory provide context, not unquestioned truth&lt;br&gt;
My first instinct was to let Hindsight do more of the decision-making.&lt;br&gt;
A new deployment comes in. Query memory. Read what comes back. Decide whether the deployment is dangerous.&lt;br&gt;
The problem is that memory retrieval is inherently different from a database lookup.&lt;br&gt;
A deployment record is structured:&lt;br&gt;
application = Payment API&lt;br&gt;
version     = v2.6.0&lt;br&gt;
environment = Production&lt;br&gt;
status      = Failed&lt;br&gt;
A memory is contextual.&lt;br&gt;
It can tell me that a previous deployment involved PostgreSQL, a database driver, and an incompatibility. It can surface a related successful deployment too. It can return information that is semantically relevant even when the wording isn't identical.&lt;br&gt;
That's exactly what I want from memory.&lt;br&gt;
It's also exactly why I don't want fuzzy recalled text to become the sole source of truth for a risk decision.&lt;br&gt;
So I split the responsibilities.&lt;br&gt;
Hindsight answers:&lt;br&gt;
"What previous experiences are relevant to this deployment?"&lt;br&gt;
SQLite answers:&lt;br&gt;
"What do we actually know about those deployments?"&lt;br&gt;
That separation turned out to be one of the most important design decisions in the project.&lt;br&gt;
Retaining an experience&lt;br&gt;
When a deployment finishes, I don't just save the fact that it succeeded or failed.&lt;br&gt;
I record the experience in a form that will be useful to a future deployment.&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%2Fo8qo0v3ebakuhb8ws3py.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%2Fo8qo0v3ebakuhb8ws3py.png" alt=" " width="799" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure  — DeployMind's Hindsight service, showing how deployment experiences are retained and later recalled from the memory bank.&lt;br&gt;
The backend builds an experience containing the deployment details, outcome, what happened, and the lesson for future deployments.&lt;br&gt;
A simplified version of the experience we retain looks like this:&lt;/p&gt;

&lt;p&gt;Deployment D043 — Payment API v2.5.0&lt;br&gt;
Environment : Production&lt;br&gt;
Changes : Upgrade PostgreSQL from 14 to 16 and update the database driver.&lt;br&gt;
Outcome : Success&lt;br&gt;
What happened : Database driver was upgraded and verified before the PostgreSQL upgrade.&lt;br&gt;
Lesson for future deployments : Before upgrading PostgreSQL, upgrade and verify the database driver first.&lt;br&gt;
Run automated tests and keep a rollback version ready.&lt;/p&gt;

&lt;p&gt;The important part isn't the amount of text.&lt;br&gt;
It's the lesson.&lt;br&gt;
A raw event such as:&lt;br&gt;
PostgreSQL upgraded from 14 to 16&lt;br&gt;
doesn't tell the next deployment what matters.&lt;br&gt;
A lesson such as : Upgrade and verify the database driver before the PostgreSQL upgrade.&lt;br&gt;
does.&lt;br&gt;
That gives Hindsight something meaningful to retrieve when a future deployment describes a similar change.&lt;br&gt;
Recall changes the next deployment&lt;br&gt;
Now consider the other side of the loop.&lt;br&gt;
A developer submits:&lt;br&gt;
Application: Payment API&lt;br&gt;
Version: v2.6.0&lt;br&gt;
Environment: Production&lt;br&gt;
Changes: PostgreSQL upgraded from version 14 to 16&lt;br&gt;
and the database driver was updated.&lt;/p&gt;

&lt;p&gt;The backend sends the deployment information into the analysis flow.&lt;br&gt;
Hindsight recalls related experiences. In one of my test scenarios, the returned memories included previous PostgreSQL upgrades, a previous database-driver incompatibility, and successful deployments where the driver was upgraded before the database change. &lt;br&gt;
The application then turns those recalled experiences into a concrete recommendation:&lt;br&gt;
Verify the database driver&lt;br&gt;
Run your automated tests&lt;br&gt;
Keep a rollback version ready.&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%2Fmw4376d2214cbdc318o9.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%2Fmw4376d2214cbdc318o9.png" alt=" " width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Figure  — DeployMind analyzes a new deployment using previously retained deployment experiences.&lt;br&gt;
The important part is that those recommendations aren't coming from a permanently hard-coded incident number.&lt;br&gt;
The system has a memory that can grow.&lt;br&gt;
A successful deployment can become another experience. A failed deployment can become another experience. A future deployment can retrieve both and compare them.&lt;/p&gt;

&lt;p&gt;The PostgreSQL example&lt;br&gt;
The clearest way to see the system is through one deployment pattern.&lt;br&gt;
Imagine an earlier deployment, D042:&lt;br&gt;
Payment API&lt;br&gt;
Production&lt;br&gt;
PostgreSQL 14 → 16&lt;/p&gt;

&lt;p&gt;Result: Failed&lt;br&gt;
Root cause: Database driver incompatibility&lt;br&gt;
The resolution becomes part of the retained experience:&lt;br&gt;
Upgrade and verify the database driver before the PostgreSQL upgrade.&lt;br&gt;
Later, another developer submits a similar deployment.&lt;br&gt;
Hindsight finds the earlier experience.&lt;br&gt;
The DeployMind analysis can then explain the warning instead of simply displaying a risk badge.&lt;br&gt;
The interface shows the Previous Experience Used, including the deployment, outcome, root cause, lesson, and the changes that were considered similar.&lt;br&gt;
It also exposes a memory trail:&lt;br&gt;
Current deployment&lt;br&gt;
        ↓&lt;br&gt;
Similar past deployment&lt;br&gt;
        ↓&lt;br&gt;
Previous result&lt;br&gt;
        ↓&lt;br&gt;
Root cause&lt;br&gt;
        ↓&lt;br&gt;
Recommendation&lt;/p&gt;

&lt;p&gt;I kept that visible intentionally.&lt;br&gt;
If a deployment tool tells me:&lt;br&gt;
"This is risky."&lt;br&gt;
I want to know why.&lt;br&gt;
If it tells me:&lt;br&gt;
"This is risky because deployment D042 previously encountered database-driver incompatibility."&lt;br&gt;
that's something I can inspect, challenge, and act on.&lt;br&gt;
The memory isn't hidden behind an opaque score.&lt;br&gt;
The reasoning layer is deliberately simple&lt;br&gt;
There is another decision I made that is easy to miss.&lt;br&gt;
DeployMind's current risk reasoning is not pretending to be a magical autonomous system.&lt;br&gt;
The backend uses the recalled deployment experiences and applies straightforward logic.&lt;br&gt;
Conceptually:&lt;br&gt;
if failure_found:    risk = "HIGH"elif success_and_failure_found:    risk = "MEDIUM"elif success_found:    risk = "LOW"else:    risk = "MEDIUM"&lt;br&gt;
The recommendation layer then turns the relevant experience into concrete checks.&lt;br&gt;
For example:&lt;br&gt;
Verify the database driver&lt;br&gt;
Run your automated tests&lt;br&gt;
Keep rollback version ready&lt;br&gt;
I prefer this kind of deterministic reasoning for a deployment safety workflow.&lt;br&gt;
Hindsight is doing the part where semantic memory is useful: finding relevant experience.&lt;br&gt;
The application is responsible for interpreting the retrieved experience consistently.&lt;br&gt;
That boundary makes the behavior easier to understand and debug.&lt;br&gt;
The memory is visible in the UI&lt;br&gt;
One of the most useful things I added was the ability to see the memories that influenced an analysis.&lt;br&gt;
The analysis page doesn't just show:&lt;br&gt;
MEDIUM RISK&lt;br&gt;
It also shows the previous experiences used to reach that conclusion.&lt;br&gt;
For each memory, the UI can show information such as:&lt;br&gt;
• deployment ID&lt;br&gt;
• application&lt;br&gt;
• environment&lt;br&gt;
• change&lt;br&gt;
• status&lt;br&gt;
• root cause&lt;br&gt;
• lesson&lt;br&gt;
• relevant shared changes&lt;br&gt;
There's also a "How did the agent reach this conclusion?" section.&lt;br&gt;
That section is intentionally boring.&lt;br&gt;
It explains which memory was relevant, which changes were shared, whether the application or environment matched, and what happened previously.&lt;br&gt;
For a system that influences production decisions, boring explanations are useful.&lt;br&gt;
What I learned while building it&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Memory and structured data solve different problems
Hindsight is useful precisely because it doesn't require an exact keyword match.
But deployment outcomes still need structured representation.
The combination is more useful than forcing either system to do everything.&lt;/li&gt;
&lt;li&gt;Retain the lesson, not just the event
"PostgreSQL was upgraded" isn't very useful by itself.
"Upgrade and verify the database driver before upgrading PostgreSQL" is actionable.
The quality of future memory depends heavily on what gets retained.&lt;/li&gt;
&lt;li&gt;Show the memory behind the recommendation
A warning becomes much easier to trust when the developer can inspect the experience behind it.
The memory trail isn't just a UI feature. It's part of making the reasoning debuggable.&lt;/li&gt;
&lt;li&gt;Similar doesn't always mean identical
One of the things I saw during development was that Hindsight can return multiple related experiences. A successful PostgreSQL upgrade can appear alongside a failed one.
That's expected from a semantic memory system.
It also means the application needs to distinguish retrieval relevance from actual deployment outcome rather than treating every recalled memory as a failure.&lt;/li&gt;
&lt;li&gt;Learning doesn't require retraining a model
The most interesting part of the system is that the agent can gain a new experience without retraining a model.
A deployment happens.
Its outcome gets recorded.
The experience is retained.
The next analysis can use it.
That's a very different mental model from traditional machine-learning training.
The "learning" here is persistent experience, not changing model weights.
Where I'd take it next
The current system deliberately keeps the reasoning layer simple.
There are several things I'd improve next.
First, risk should eventually account for more than whether any related deployment failed. Recency, environment, application similarity, and the strength of the retrieved match could all influence the decision.
Second, a cold-start deployment deserves a state that is different from LOW risk. "I don't have relevant experience" is not the same thing as "this is safe."
Third, recalled memories need increasingly strong filtering as the memory bank grows. More memory is useful only if the system can surface the right experiences without overwhelming the developer.
Those are problems I would rather solve incrementally than hide behind a more complicated model.
The part that surprised me
The actual learning loop is tiny.
There isn't a training pipeline.
There isn't a model fine-tuning job every time a deployment finishes.
There isn't a giant rules file containing every incident the team has ever seen.
There is a deployment outcome, a retained experience, and a future query that can retrieve it.
That changed how I think about agent memory.
The interesting question isn't simply:
"Can an agent remember?"
It's:
"What should an agent remember, and what should it be trusted to do with that memory?"
For DeployMind, my answer is deliberately conservative.
Let Hindsight remember the experiences.
Let structured data keep the facts.
Let the reasoning layer connect the two.
And, most importantly, show the developer the memory that influenced the recommendation.
That's what turns a deployment warning from another notification into something an engineer can actually reason about.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>ai</category>
      <category>automation</category>
      <category>database</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
