<?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: Kiran H</title>
    <description>The latest articles on DEV Community by Kiran H (@kiranh05).</description>
    <link>https://dev.to/kiranh05</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%2F3839665%2F1b43a56f-2c8c-47f6-bab0-8d3578fb8ab8.png</url>
      <title>DEV Community: Kiran H</title>
      <link>https://dev.to/kiranh05</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kiranh05"/>
    <language>en</language>
    <item>
      <title>Nobody Talks About the Person Who Stops __the Team from Shipping a Broken Demo__</title>
      <dc:creator>Kiran H</dc:creator>
      <pubDate>Mon, 23 Mar 2026 09:58:21 +0000</pubDate>
      <link>https://dev.to/kiranh05/nobody-talks-about-the-person-who-stops-the-team-from-shipping-a-broken-demo-3i38</link>
      <guid>https://dev.to/kiranh05/nobody-talks-about-the-person-who-stops-the-team-from-shipping-a-broken-demo-3i38</guid>
      <description>&lt;p&gt;By: Kiran H — QA, Documentation &amp;amp; GitHub&lt;/p&gt;

&lt;p&gt;Hindsight Hackathon — Team 1/0 Coders&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The night before the demo, I found a hardcoded API key sitting in a committed file. One grep command. Thirty seconds. That's the kind of thing that ends a project's credibility before a judge reads a single line of code.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Everyone talks about the engineers who built the memory module, wired the LLM, and designed the execution engine. Nobody talks about the person who made sure none of it fell apart before the judges saw it.&lt;/p&gt;

&lt;p&gt;That was my job. And it turned out to be just as technical — and just as important — as any of the features we shipped.&lt;/p&gt;

&lt;h2&gt;
  
  
  What My Role Actually Meant
&lt;/h2&gt;

&lt;p&gt;On paper, my tasks were: write the README, clean up GitHub, run QA tests, handle the submission checklist. Sounds administrative. It wasn't.&lt;/p&gt;

&lt;p&gt;In practice it meant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Being the first person to read the codebase as an outsider&lt;/li&gt;
&lt;li&gt;Finding the gaps between what the code does and what the docs say it does&lt;/li&gt;
&lt;li&gt;Running the full pipeline end to end before anyone else did&lt;/li&gt;
&lt;li&gt;Making sure no secrets, no broken imports, no hardcoded paths made it to main&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I missed something, the judges would find it. And judges don't give partial credit for 'it works on my machine.'&lt;/p&gt;

&lt;h2&gt;
  
  
  The README Is Not Documentation. It's a First Impression.
&lt;/h2&gt;

&lt;p&gt;I've seen good projects lose to average ones because the README was a disaster. Judges are busy. They spend maybe 90 seconds on your repo before deciding if it's worth their full attention.&lt;/p&gt;

&lt;p&gt;Our README had to answer five questions in that 90 seconds:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What does this project do?&lt;/li&gt;
&lt;li&gt;How does it use Hindsight? (judges specifically check this)&lt;/li&gt;
&lt;li&gt;How do I run it?&lt;/li&gt;
&lt;li&gt;What are the API endpoints?&lt;/li&gt;
&lt;li&gt;Who built what?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I structured it around those five questions. Not around the code. Not around how we built it. Around what a judge needs to know.&lt;/p&gt;

&lt;p&gt;The Hindsight section was the most important. The judges are evaluating memory integration — so I made that impossible to miss:&lt;/p&gt;

&lt;p&gt;## How Hindsight Memory Works&lt;/p&gt;

&lt;p&gt;Every code submission triggers a full memory pipeline:&lt;/p&gt;

&lt;p&gt;1. signal_tracker.py captures behavioral signals&lt;/p&gt;

&lt;p&gt;(time taken, edit count, error types, attempt number)&lt;/p&gt;

&lt;p&gt;2. cognitive_analyzer.py converts signals into patterns&lt;/p&gt;

&lt;p&gt;(rushing, overthinking, guessing, concept_gap)&lt;/p&gt;

&lt;p&gt;3. hindsight.py stores patterns to Hindsight Cloud&lt;/p&gt;

&lt;p&gt;via retain() with user_id metadata&lt;/p&gt;

&lt;p&gt;4. On next session, recall() retrieves the user profile&lt;/p&gt;

&lt;p&gt;and reflect() generates adaptive instructions for the LLM&lt;/p&gt;

&lt;p&gt;Clear. Sequential. No jargon. A judge who has never seen our code can understand the memory architecture in 30 seconds.&lt;/p&gt;

&lt;h2&gt;
  
  
  The .gitignore Problem
&lt;/h2&gt;

&lt;p&gt;Before I touched the README, I ran one command:&lt;/p&gt;

&lt;p&gt;git log --all --full-history -- .env&lt;/p&gt;

&lt;p&gt;I was checking if anyone had ever committed a .env file. They hadn't — but memory_data.json was being tracked. That file contains real user behavioral data from testing sessions. User IDs, patterns, session timestamps. Not something that should be in a public repo.&lt;/p&gt;

&lt;p&gt;I updated .gitignore immediately:&lt;/p&gt;

&lt;p&gt;# Secrets&lt;/p&gt;

&lt;p&gt;.env&lt;/p&gt;

&lt;p&gt;# Runtime data&lt;/p&gt;

&lt;p&gt;memory_data.json&lt;/p&gt;

&lt;p&gt;# Python&lt;/p&gt;

&lt;p&gt;__pycache__/&lt;/p&gt;

&lt;p&gt;*.pyc&lt;/p&gt;

&lt;p&gt;.venv/&lt;/p&gt;

&lt;p&gt;# Node&lt;/p&gt;

&lt;p&gt;node_modules/&lt;/p&gt;

&lt;p&gt;dist/&lt;/p&gt;

&lt;p&gt;Then I checked every file for hardcoded API keys:&lt;/p&gt;

&lt;p&gt;grep -r "sk-" . --include="*.py"&lt;/p&gt;

&lt;p&gt;grep -r "gsk_" . --include="*.py"&lt;/p&gt;

&lt;p&gt;grep -r "API_KEY" . --include="*.py" | grep -v "os.getenv"&lt;/p&gt;

&lt;p&gt;One hit. A Groq key sitting in an old test file that never got cleaned up. Removed it, rotated the key, committed the fix. Thirty seconds of work that would have been a very bad moment in front of judges.&lt;/p&gt;

&lt;h2&gt;
  
  
  QA Testing: Finding Bugs Before the Judges Do
&lt;/h2&gt;

&lt;p&gt;I ran the full 5-step integration test manually, documenting every response:&lt;/p&gt;

&lt;p&gt;Step 1: GET  /get_problem/p001          → 200 OK &lt;/p&gt;

&lt;p&gt;Step 2: POST /submit_code               → 200 OK, patterns detected &lt;/p&gt;

&lt;p&gt;Step 3: GET  /memory/recall/{user_id}   → patterns stored in Hindsight &lt;/p&gt;

&lt;p&gt;Step 4: GET  /user_profile/{user_id}    → profile populated &lt;/p&gt;

&lt;p&gt;Step 5: POST /get_feedback              → personalized hint returned &lt;/p&gt;

&lt;p&gt;Then I tested the edge cases — the things developers forget to test because they're too close to their own code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Infinite loop submission → should timeout in 5 seconds, not hang forever&lt;/li&gt;
&lt;li&gt;Problem ID that doesn't exist → should return 404, not 500&lt;/li&gt;
&lt;li&gt;New user with no memory → should return default profile, not crash&lt;/li&gt;
&lt;li&gt;GET /problems/difficulty/hard → should return filtered list, not all problems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The infinite loop test was the most important. If a user submits:&lt;/p&gt;

&lt;p&gt;def two_sum(nums, target):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;while True:

    pass
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The execution service needs to kill that in 5 seconds. If it doesn't, the server hangs and every other user's request is blocked. It worked — the threading timeout in execution_service.py caught it cleanly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making the Repo Public Without Embarrassing the Team
&lt;/h2&gt;

&lt;p&gt;Making a repo public isn't just flipping a switch. It means every commit, every branch name, every comment in every file is now visible to anyone.&lt;/p&gt;

&lt;p&gt;I did a final sweep before flipping it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Checked all branch names were professional&lt;/li&gt;
&lt;li&gt;Verified the commit history told a clean story&lt;/li&gt;
&lt;li&gt;Confirmed requirements.txt matched what's actually installed&lt;/li&gt;
&lt;li&gt;Added repo description and topic tags: fastapi, groq, hindsight, ai, python, coding-mentor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The topic tags matter more than people think. They make the repo discoverable. Judges browsing Hindsight hackathon submissions can find us through tags.&lt;/p&gt;

&lt;p&gt;Then I merged dev into main with a single clean commit:&lt;/p&gt;

&lt;p&gt;"feat: complete backend MVP — AI coding mentor with Hindsight memory"&lt;/p&gt;

&lt;p&gt;One commit message. Tells the whole story. Clean history.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Submission Checklist Nobody Skips&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The night before submission I went through every item:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub repo is public &lt;/li&gt;
&lt;li&gt;README explains Hindsight usage clearly &lt;/li&gt;
&lt;li&gt;.env.example has all keys, no real values &lt;/li&gt;
&lt;li&gt;All branches merged to main &lt;/li&gt;
&lt;li&gt;Demo video link in README &lt;/li&gt;
&lt;li&gt;Article links in README &lt;/li&gt;
&lt;li&gt;requirements.txt complete and updated &lt;/li&gt;
&lt;li&gt;No .env files committed &lt;/li&gt;
&lt;li&gt;No hardcoded API keys anywhere &lt;/li&gt;
&lt;li&gt;memory_data.json in .gitignore &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every item on that list is something that has cost a team points in a real submission. Not hypothetically — actually. A missing .env.example means a judge can't run your project. A private repo means they can't even see it.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;_&lt;em&gt;Documentation is a product. _&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;A judge reading your README is a user. Design it for them, not for yourself. Answer their questions in the order they'll ask them.&lt;/li&gt;
&lt;li&gt;_&lt;em&gt;Security is a QA task, not a DevOps task. _&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Checking for hardcoded secrets takes 5 minutes. Rotating a leaked key and explaining it to your team takes much longer.&lt;/li&gt;
&lt;li&gt;_&lt;em&gt;Edge cases are where judges look. _&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The happy path works for everyone. What happens with an infinite loop, a missing user, a bad problem ID — that's what separates a demo from a product.&lt;/li&gt;
&lt;li&gt;_&lt;em&gt;Clean history tells a story. _&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;A judge reading your commit log should understand what you built and in what order. One clear commit message beats ten 'fix stuff' commits every time.&lt;/li&gt;
&lt;li&gt;_&lt;em&gt;The quality gate role is a real engineering role. _&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;It requires understanding the full system, reading code you didn't write, and making judgment calls about what's acceptable to ship. That's not admin work. That's engineering.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Resources &amp;amp; Links&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hindsight GitHub: &lt;a href="https://github%5C.com/vectorize%5C-io/hindsight" rel="noopener noreferrer"&gt;https://github\.com/vectorize\-io/hindsight&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hindsight Docs: &lt;a href="https://hindsight%5C.vectorize%5C.io/" rel="noopener noreferrer"&gt;https://hindsight\.vectorize\.io/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agent Memory: &lt;a href="https://vectorize%5C.io/features/agent%5C-memory" rel="noopener noreferrer"&gt;https://vectorize\.io/features/agent\-memory&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>github</category>
      <category>microsoft</category>
      <category>python</category>
    </item>
  </channel>
</rss>
