<?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: Aditya Raut</title>
    <description>The latest articles on DEV Community by Aditya Raut (@aditya_raut_1105).</description>
    <link>https://dev.to/aditya_raut_1105</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%2F4190893%2Fcec3c9ee-adac-4073-9f35-4abb563709e5.png</url>
      <title>DEV Community: Aditya Raut</title>
      <link>https://dev.to/aditya_raut_1105</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aditya_raut_1105"/>
    <language>en</language>
    <item>
      <title>Building TeamRescue: Finding the Right Expert with FalkorDB</title>
      <dc:creator>Aditya Raut</dc:creator>
      <pubDate>Sun, 18 Oct 2026 13:44:07 +0000</pubDate>
      <link>https://dev.to/aditya_raut_1105/building-teamrescue-finding-the-right-expert-with-falkordb-4la0</link>
      <guid>https://dev.to/aditya_raut_1105/building-teamrescue-finding-the-right-expert-with-falkordb-4la0</guid>
      <description>&lt;p&gt;A service fails. Its owner is unavailable. Who should the team ask for help?&lt;/p&gt;

&lt;p&gt;A list of employee names cannot answer that question. We need to know which services are connected, who owns them, who has resolved related incidents, and who is available now.&lt;/p&gt;

&lt;p&gt;That is the problem I explored with &lt;strong&gt;TeamRescue&lt;/strong&gt;, my project for Graph Hacks by WeMakeDevs and FalkorDB.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://teamrescue.onrender.com" rel="noopener noreferrer"&gt;Try TeamRescue&lt;/a&gt;&lt;/strong&gt; · &lt;strong&gt;&lt;a href="https://github.com/aditya052003/teamrescue" rel="noopener noreferrer"&gt;View the source code&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem: finding someone with the right context
&lt;/h2&gt;

&lt;p&gt;During an incident, knowing the service owner is useful—but what happens when that person is unavailable?&lt;/p&gt;

&lt;p&gt;Someone else may have fixed a related issue before. Their experience matters, even if they are not the official owner.&lt;/p&gt;

&lt;p&gt;TeamRescue connects this information so a user can ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Checkout is failing. Who can help and why?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The goal is a recommendation that people can inspect: a person, a reason, and the relationships supporting that reason.&lt;/p&gt;

&lt;h2&gt;
  
  
  A small graph with a meaningful decision
&lt;/h2&gt;

&lt;p&gt;I started with a deliberately small, fictional dataset:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Checkout&lt;/strong&gt; depends on &lt;strong&gt;Payment Service&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Priya&lt;/strong&gt; owns Payment Service.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rahul&lt;/strong&gt; resolved &lt;strong&gt;INC-001&lt;/strong&gt;, a previous payment timeout.&lt;/li&gt;
&lt;li&gt;That incident affected Payment Service.&lt;/li&gt;
&lt;li&gt;Each person has an availability value.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The core graph model is:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Starting node&lt;/th&gt;
&lt;th&gt;Relationship&lt;/th&gt;
&lt;th&gt;Connected node&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Person&lt;/td&gt;
&lt;td&gt;OWNS&lt;/td&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;td&gt;DEPENDS_ON&lt;/td&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Person&lt;/td&gt;
&lt;td&gt;RESOLVED&lt;/td&gt;
&lt;td&gt;Incident&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Incident&lt;/td&gt;
&lt;td&gt;AFFECTED&lt;/td&gt;
&lt;td&gt;Service&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;These relationships let the application connect a failing service to someone with relevant experience.&lt;/p&gt;

&lt;p&gt;When Priya is unavailable and Rahul is available, TeamRescue recommends Rahul based on his previous incident experience. When Priya becomes available, the recommendation changes to the service owner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Changing one fact in the graph changes the decision.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I used FalkorDB
&lt;/h2&gt;

&lt;p&gt;The question depends on several connected facts, rather than one matching record.&lt;/p&gt;

&lt;p&gt;FalkorDB stores those relationships directly. Cypher lets the backend follow a service dependency, find a related incident, and identify the person who resolved it.&lt;/p&gt;

&lt;p&gt;This query illustrates the backup-expert lookup for Checkout:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight cypher"&gt;&lt;code&gt;&lt;span class="k"&gt;MATCH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;:Service&lt;/span&gt; &lt;span class="ss"&gt;{&lt;/span&gt;&lt;span class="py"&gt;name:&lt;/span&gt; &lt;span class="s1"&gt;'Checkout'&lt;/span&gt;&lt;span class="ss"&gt;})&lt;/span&gt;
  &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:DEPENDS_ON&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&amp;gt;&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;s:&lt;/span&gt;&lt;span class="n"&gt;Service&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:AFFECTED&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;i:&lt;/span&gt;&lt;span class="n"&gt;Incident&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
  &lt;span class="o"&gt;&amp;lt;-&lt;/span&gt;&lt;span class="ss"&gt;[&lt;/span&gt;&lt;span class="nc"&gt;:RESOLVED&lt;/span&gt;&lt;span class="ss"&gt;]&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="ss"&gt;(&lt;/span&gt;&lt;span class="py"&gt;p:&lt;/span&gt;&lt;span class="n"&gt;Person&lt;/span&gt;&lt;span class="ss"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;p.available&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;
  &lt;span class="ow"&gt;AND&lt;/span&gt; &lt;span class="n"&gt;i.status&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'resolved'&lt;/span&gt;
&lt;span class="k"&gt;RETURN&lt;/span&gt;
  &lt;span class="n"&gt;p.name&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;recommended_person&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;s.name&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;service&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;i.id&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;incident_id&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt;
  &lt;span class="n"&gt;i.title&lt;/span&gt; &lt;span class="k"&gt;AS&lt;/span&gt; &lt;span class="n"&gt;past_incident&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;p.name&lt;/span&gt;&lt;span class="ss"&gt;,&lt;/span&gt; &lt;span class="n"&gt;i.id&lt;/span&gt;
&lt;span class="k"&gt;LIMIT&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application first checks for an available owner. A person with relevant resolved-incident experience is the fallback.&lt;/p&gt;

&lt;p&gt;This is a simple selection policy, not a sophisticated expertise-ranking system. That made it easier to test and explain during the hackathon.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the AI uses the graph
&lt;/h2&gt;

&lt;p&gt;TeamRescue uses a React frontend, a Node.js and Express backend, FalkorDB, and Gemini.&lt;/p&gt;

&lt;p&gt;The backend exposes tools such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;list_services&lt;/code&gt;: identifies services recorded in the graph.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_service_context&lt;/code&gt;: retrieves ownership, availability, dependencies, and relevant incident experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The AI can request this context and turn the returned information into a readable explanation. The backend determines the recommendation from the graph using the owner-first policy.&lt;/p&gt;

&lt;p&gt;The interface also displays the supporting evidence separately:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which service depends on which.&lt;/li&gt;
&lt;li&gt;Who owns the relevant service.&lt;/li&gt;
&lt;li&gt;Whether that owner is available.&lt;/li&gt;
&lt;li&gt;Who resolved a related incident.&lt;/li&gt;
&lt;li&gt;Why the person was recommended.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives the user something concrete to check alongside the generated answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  A dependency is not proof of the root cause
&lt;/h2&gt;

&lt;p&gt;One important design decision was to limit what the assistant claims.&lt;/p&gt;

&lt;p&gt;Checkout depending on Payment Service does &lt;strong&gt;not&lt;/strong&gt; prove that Payment Service caused the current failure.&lt;/p&gt;

&lt;p&gt;It gives us a reason to investigate that service and contact someone familiar with it.&lt;/p&gt;

&lt;p&gt;TeamRescue makes this distinction visible in its interface. It also states that availability reflects the time of the lookup. After changing availability, the user should ask again to get a fresh recommendation.&lt;/p&gt;

&lt;p&gt;These details help keep an explanation from sounding more certain than its evidence allows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Saving context for the next person
&lt;/h2&gt;

&lt;p&gt;Finding an expert is only part of a handoff. The next person also needs to understand why that recommendation was made.&lt;/p&gt;

&lt;p&gt;TeamRescue lets users save a draft handoff containing the recommended person, service, a note, and supporting context in FalkorDB.&lt;/p&gt;

&lt;p&gt;Before saving, the backend rechecks current availability. Previously saved records are shown as historical recommendations because availability may have changed since they were created.&lt;/p&gt;

&lt;p&gt;For example, a saved record may recommend Rahul from an earlier lookup, while a newer record recommends Priya after she becomes available.&lt;/p&gt;

&lt;p&gt;The prototype saves draft records only. It does not send notifications or assign work.&lt;/p&gt;

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

&lt;p&gt;I tested the deployed interface with two availability scenarios:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Priya unavailable, Rahul available&lt;/td&gt;
&lt;td&gt;Rahul recommended based on previous incident experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Priya available, Rahul unavailable&lt;/td&gt;
&lt;td&gt;Priya recommended as the available service owner&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;I also created handoff drafts and checked that the saved list displayed the recommended people, explanations, and timestamps.&lt;/p&gt;

&lt;p&gt;The useful result was seeing the recommendation respond to changed graph data while retaining the context of earlier saved decisions.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Start with a question, then model the relationships
&lt;/h3&gt;

&lt;p&gt;The most useful starting point was “Who can help when the owner is unavailable?”&lt;/p&gt;

&lt;p&gt;That question guided the choice of people, services, incidents, and relationships. A small model was enough to demonstrate a meaningful traversal.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make the explanation visible
&lt;/h3&gt;

&lt;p&gt;Showing only a recommended name would hide most of the value of the graph.&lt;/p&gt;

&lt;p&gt;Displaying ownership, dependencies, and incident history made the decision easier to understand and test.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local setup and deployment are separate challenges
&lt;/h3&gt;

&lt;p&gt;My first Docker issue was that the command-line tool was installed, but the Docker engine was not running. Starting Docker Desktop resolved that setup problem.&lt;/p&gt;

&lt;p&gt;Moving to the cloud involved additional configuration: database connection variables, the frontend’s backend URL, CORS, and the server’s listening address and port.&lt;/p&gt;

&lt;p&gt;These steps taught me that a working local application still needs careful deployment verification.&lt;/p&gt;

&lt;h3&gt;
  
  
  Keep current state separate from historical decisions
&lt;/h3&gt;

&lt;p&gt;Availability can change. A saved recommendation records what was known at one point in time.&lt;/p&gt;

&lt;p&gt;Keeping that distinction visible is important when someone reviews a handoff later.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current limitations
&lt;/h2&gt;

&lt;p&gt;TeamRescue is a hackathon prototype using fictional data.&lt;/p&gt;

&lt;p&gt;Its current scope includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The requested service and its direct dependencies.&lt;/li&gt;
&lt;li&gt;A simple owner-first recommendation policy.&lt;/li&gt;
&lt;li&gt;Manually updated availability.&lt;/li&gt;
&lt;li&gt;Saved draft handoffs without notifications or assignment.&lt;/li&gt;
&lt;li&gt;A small demonstration dataset.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The public demo is not intended for confidential company information. Production use would require authentication, access controls, tenant isolation, and stronger operational safeguards.&lt;/p&gt;

&lt;p&gt;The free backend hosting can also cause a slower first request after inactivity.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would build next
&lt;/h2&gt;

&lt;p&gt;I would extend the project with deeper dependency traversal, incident recency, workload-aware recommendations, and access-controlled integrations with issue trackers.&lt;/p&gt;

&lt;p&gt;I would also explore how saved handoffs could help future agent sessions retrieve relevant previous decisions. The current prototype displays historical records; it does not yet use them as an advanced agent-memory system.&lt;/p&gt;

&lt;p&gt;For this version, the central lesson was practical: an assistant becomes easier to trust when its recommendation is tied to relationships a person can inspect.&lt;/p&gt;

&lt;p&gt;Try it: &lt;a href="https://teamrescue.onrender.com" rel="noopener noreferrer"&gt;https://teamrescue.onrender.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Source code: &lt;a href="https://github.com/aditya052003/teamrescue" rel="noopener noreferrer"&gt;https://github.com/aditya052003/teamrescue&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>hackathon</category>
      <category>webdev</category>
      <category>falkordb</category>
    </item>
  </channel>
</rss>
