<?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: Sanjana S</title>
    <description>The latest articles on DEV Community by Sanjana S (@sanjana_s_7d5ebe5dbc36fc5).</description>
    <link>https://dev.to/sanjana_s_7d5ebe5dbc36fc5</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3840445%2Ffdb8800f-e32a-4be5-9509-8af60428fe8c.png</url>
      <title>DEV Community: Sanjana S</title>
      <link>https://dev.to/sanjana_s_7d5ebe5dbc36fc5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sanjana_s_7d5ebe5dbc36fc5"/>
    <language>en</language>
    <item>
      <title>Hindsight improved consistency in career advice</title>
      <dc:creator>Sanjana S</dc:creator>
      <pubDate>Mon, 23 Mar 2026 16:49:40 +0000</pubDate>
      <link>https://dev.to/sanjana_s_7d5ebe5dbc36fc5/hindsight-improved-consistency-in-career-advice-38f1</link>
      <guid>https://dev.to/sanjana_s_7d5ebe5dbc36fc5/hindsight-improved-consistency-in-career-advice-38f1</guid>
      <description>&lt;h1&gt;
  
  
  Hindsight improved consistency in career advice
&lt;/h1&gt;

&lt;p&gt;“This skill wasn’t even in the resume.”&lt;br&gt;
That’s what made me stop and check the logs.&lt;/p&gt;

&lt;p&gt;The agent had flagged a skill the user never explicitly mentioned in their latest input. At first, it looked like a hallucination. But when I traced it back through the Hindsight logs, it turned out the system had picked it up from a project the user added earlier.&lt;/p&gt;

&lt;p&gt;That’s when I realized the system wasn’t guessing — it was remembering.&lt;/p&gt;
&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;I built a simple AI career advisor to help students track their skills, projects, and internship applications. The idea wasn’t new. Plenty of tools already generate resume feedback or suggest roles.&lt;/p&gt;

&lt;p&gt;The difference was small but intentional:&lt;br&gt;
I didn’t want each interaction to be isolated.&lt;/p&gt;

&lt;p&gt;Instead of treating every input as a fresh start, I wanted the system to build context over time and use that context when giving advice.&lt;/p&gt;

&lt;p&gt;The stack is minimal:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Streamlit for the UI&lt;/li&gt;
&lt;li&gt;An LLM API for generating responses&lt;/li&gt;
&lt;li&gt;A memory layer using &lt;a href="https://github.com/vectorize-io/hindsight" rel="noopener noreferrer"&gt;Hindsight&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The first two parts are standard. The third one is where things changed.&lt;/p&gt;
&lt;h2&gt;
  
  
  The problem with skills
&lt;/h2&gt;

&lt;p&gt;In the initial version, I relied directly on user input.&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="n"&gt;user_input&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;skills&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;Python&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;Machine Learning&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;projects&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;Sentiment analysis app&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Based on this, the agent would generate recommendations like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Apply for machine learning internships”&lt;/li&gt;
&lt;li&gt;“Strengthen your deep learning knowledge”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It looked fine. But it wasn’t reliable.&lt;/p&gt;

&lt;p&gt;The issue showed up quickly when I tried edge cases. If a user added a skill without meaningful experience, the system would fully trust it. A single keyword could completely change the direction of the advice.&lt;/p&gt;

&lt;p&gt;Someone could write “Embedded Systems” after blinking an LED once, and suddenly the agent would start recommending firmware roles.&lt;/p&gt;

&lt;p&gt;That’s when the flaw became obvious:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Skills shouldn’t come from what users say — they should come from what they actually do.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Logging actions with Hindsight
&lt;/h2&gt;

&lt;p&gt;To move away from static input, I started logging user actions as events using Hindsight.&lt;/p&gt;

&lt;p&gt;For example:&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="n"&gt;hindsight&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;event_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;project_added&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;payload&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;title&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;ESP32 LED Blink&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;tech&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;ESP32&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;C&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="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And for applications:&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="n"&gt;hindsight&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;event_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;internship_applied&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;payload&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;role&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;Frontend Intern&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;result&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;rejected&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Instead of a snapshot, I now had a timeline.&lt;/p&gt;

&lt;p&gt;If you look at the &lt;a href="https://hindsight.vectorize.io/" rel="noopener noreferrer"&gt;Hindsight documentation&lt;/a&gt;, this approach is closer to event-based memory than traditional chat history. You store structured actions and reconstruct context when needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deriving skills instead of trusting them
&lt;/h2&gt;

&lt;p&gt;Once events were in place, I stopped using the &lt;code&gt;skills&lt;/code&gt; field directly. Instead, I derived skills from user activity.&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="n"&gt;events&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hindsight&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_events&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;skills&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;set&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;events&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;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;project_added&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;skills&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;update&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;payload&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tech&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This change was small in code but significant in behavior.&lt;/p&gt;

&lt;p&gt;Now:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Skills are based on projects and actions&lt;/li&gt;
&lt;li&gt;Repeated usage reinforces certain skills&lt;/li&gt;
&lt;li&gt;Random additions don’t immediately affect output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It also made the system stricter. Users couldn’t just add a keyword and expect instant changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using memory in prompts
&lt;/h2&gt;

&lt;p&gt;The next challenge was deciding how much memory to include.&lt;/p&gt;

&lt;p&gt;Passing all events into the prompt didn’t work. It introduced noise and made responses inconsistent.&lt;/p&gt;

&lt;p&gt;So I limited retrieval:&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="n"&gt;relevant_events&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hindsight&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;limit&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;format_events&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;relevant_events&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&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="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;user_query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This approach keeps things manageable:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only recent or relevant events are included&lt;/li&gt;
&lt;li&gt;The prompt stays within limits&lt;/li&gt;
&lt;li&gt;The model gets enough context to adjust responses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a broader view of how this fits into agent systems, the &lt;a href="https://vectorize.io/features/agent-memory" rel="noopener noreferrer"&gt;Vectorize agent memory page&lt;/a&gt; gives a good overview.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually changed
&lt;/h2&gt;

&lt;p&gt;Before adding memory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The system reacted only to current input&lt;/li&gt;
&lt;li&gt;Skills were static and user-defined&lt;/li&gt;
&lt;li&gt;Same input produced the same output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After adding Hindsight:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The system considers past behavior&lt;/li&gt;
&lt;li&gt;Skills evolve over time&lt;/li&gt;
&lt;li&gt;Same input produces different output depending on history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;br&gt;
“Apply for machine learning internships.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt;&lt;br&gt;
“You’ve listed ML, but your projects don’t reflect it yet.”&lt;/p&gt;

&lt;p&gt;The difference is subtle, but important. The second response is grounded in history, not just input.&lt;/p&gt;
&lt;h2&gt;
  
  
  Where it got interesting
&lt;/h2&gt;

&lt;p&gt;The most interesting behavior showed up when inputs conflicted.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A user builds backend-heavy projects&lt;/li&gt;
&lt;li&gt;Applies to frontend roles and gets rejected&lt;/li&gt;
&lt;li&gt;Adds “React” as a skill&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A stateless system would immediately switch to frontend recommendations.&lt;/p&gt;

&lt;p&gt;With Hindsight, the response became more cautious:&lt;/p&gt;

&lt;p&gt;“You’ve recently added React, but your past work is still backend-focused. Consider building a frontend project before applying again.”&lt;/p&gt;

&lt;p&gt;This wasn’t hardcoded. It emerged from combining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Event history&lt;/li&gt;
&lt;li&gt;Derived skills&lt;/li&gt;
&lt;li&gt;Prompt logic&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  A subtle bug memory exposed
&lt;/h2&gt;

&lt;p&gt;Before memory, resume feedback was simple:&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;generate_resume_feedback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resume_text&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resume_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After integrating Hindsight:&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;generate_resume_feedback&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resume_text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;events&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;hindsight&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get_events&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;summarize&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;events&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;resume_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The same resume started getting slightly different feedback over time.&lt;/p&gt;

&lt;p&gt;At first, I thought it was randomness. But it turned out the system was incorporating past outcomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rejections → more critical feedback&lt;/li&gt;
&lt;li&gt;Improved projects → more positive suggestions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This made responses more contextual, but also harder to debug.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tradeoffs
&lt;/h2&gt;

&lt;p&gt;Adding memory improved consistency, but introduced friction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debugging got harder&lt;/strong&gt;&lt;br&gt;
You can’t reproduce behavior with just input anymore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data structure matters&lt;/strong&gt;&lt;br&gt;
If events aren’t consistent, everything breaks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt balancing is tricky&lt;/strong&gt;&lt;br&gt;
Too much context adds noise. Too little removes value.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Behavior needs explanation&lt;/strong&gt;&lt;br&gt;
If responses change, users need to know why.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Don’t rely on user-declared skills&lt;/li&gt;
&lt;li&gt;Store structured events early&lt;/li&gt;
&lt;li&gt;Derive state instead of trusting input&lt;/li&gt;
&lt;li&gt;Retrieve selectively, not everything&lt;/li&gt;
&lt;li&gt;Make reasoning visible in responses&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What I’d change next
&lt;/h2&gt;

&lt;p&gt;If I extend this further, I’d focus on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding recency weighting&lt;/li&gt;
&lt;li&gt;Tracking richer outcomes (interviews, shortlists)&lt;/li&gt;
&lt;li&gt;Introducing a skill confidence score&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right now, skills are binary. In reality, they should evolve gradually.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing
&lt;/h2&gt;

&lt;p&gt;The biggest improvement didn’t come from better prompts or a better model.&lt;/p&gt;

&lt;p&gt;It came from changing how the system thinks about memory.&lt;/p&gt;

&lt;p&gt;Once it stopped reacting to single inputs and started using patterns over time, the advice became more consistent.&lt;/p&gt;

&lt;p&gt;Not perfect — but grounded enough to be useful.&lt;/p&gt;

&lt;p&gt;And that turned out to matter more than anything else.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>career</category>
      <category>showdev</category>
    </item>
    <item>
      <title>AI Internship &amp; Career Advisor</title>
      <dc:creator>Sanjana S</dc:creator>
      <pubDate>Mon, 23 Mar 2026 16:17:16 +0000</pubDate>
      <link>https://dev.to/sanjana_s_7d5ebe5dbc36fc5/ai-internship-career-advisor-5dm3</link>
      <guid>https://dev.to/sanjana_s_7d5ebe5dbc36fc5/ai-internship-career-advisor-5dm3</guid>
      <description>&lt;p&gt;You are an experienced software engineer who writes high-performing technical articles for skeptical developers on&lt;br&gt;
  sites like Hacker News, Reddit, and personal blogs.&lt;/p&gt;

&lt;p&gt;Your task: generate 20 possible article titles. about the project in this repo.&lt;/p&gt;

&lt;p&gt;Constraints&lt;br&gt;
  Audience: experienced engineers, not managers or marketers.&lt;/p&gt;

&lt;p&gt;Voice: first person (“I…”, “What I learned…”) where natural, but don’t force it.&lt;/p&gt;

&lt;p&gt;Style:&lt;/p&gt;

&lt;p&gt;Short, concrete, specific. No more than 7 total words.&lt;/p&gt;

&lt;p&gt;No hype, no clickbait, no buzzwords (“revolutionary”, “unlock”, “smart”, “AI-powered”, etc.).&lt;/p&gt;

&lt;p&gt;Titles should sound like something a real engineer would post, not a brand.&lt;/p&gt;

&lt;p&gt;Each title must:&lt;/p&gt;

&lt;p&gt;Mention Hindsight (nothing negative about Hindsight)&lt;/p&gt;

&lt;p&gt;Hint at a real story, failure, or insight.&lt;/p&gt;

&lt;p&gt;Be about one specific idea, decision, or problem (not a broad category like “agent memory” in general).&lt;/p&gt;

&lt;p&gt;Make another engineer curious enough to think “I want to see what happened there.”&lt;/p&gt;

&lt;p&gt;Good patterns&lt;br&gt;
  Prefer patterns like:&lt;/p&gt;

&lt;p&gt;“I built an agent that X, here’s what I learned.”&lt;/p&gt;

&lt;p&gt;“How I Did Y With Z”&lt;/p&gt;

&lt;p&gt;“Why I Stopped Doing X and Switched to Y”&lt;/p&gt;

&lt;p&gt;“How I Designed/Built/Debugged Z”&lt;/p&gt;

&lt;p&gt;Avoid patterns like:&lt;/p&gt;

&lt;p&gt;“The Future of X”&lt;/p&gt;

&lt;p&gt;“Why X Will Change Everything”&lt;/p&gt;

&lt;p&gt;“A Comprehensive Guide to X”&lt;/p&gt;

&lt;p&gt;Look through the code in this repository and identify potential candidates for the article’s core topic, for example:&lt;/p&gt;

&lt;p&gt;“Building an agent memory system for a customer support bot”&lt;/p&gt;

&lt;p&gt;“Debugging subtle race conditions in a Go service”&lt;/p&gt;

&lt;p&gt;“Teaching a coding agent to remember user preferences”&lt;/p&gt;

&lt;p&gt;Try to frame the story around agent learning with Hindsight. &lt;/p&gt;

&lt;p&gt;Output&lt;br&gt;
  Return exactly 20 titles.&lt;/p&gt;

&lt;p&gt;One title per line, no numbering, no extra commentary.&lt;/p&gt;

&lt;p&gt;Make them diverse: vary the verbs, angles, and structures, not just “What I Learned…” twenty times.&lt;/p&gt;

&lt;p&gt;produce 20 titles that follow these rules. for the problem statements AI intership and Career advisor &lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
