<?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: Sagar Maurya</title>
    <description>The latest articles on DEV Community by Sagar Maurya (@sagarmaurya).</description>
    <link>https://dev.to/sagarmaurya</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%2F3019158%2Fbf3e71fa-5bc7-4293-8853-83a8f3915ad9.gif</url>
      <title>DEV Community: Sagar Maurya</title>
      <link>https://dev.to/sagarmaurya</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sagarmaurya"/>
    <language>en</language>
    <item>
      <title>Ouroboros AI: We Made a Fake Agent Break Itself, Then Built Something That Fixes It</title>
      <dc:creator>Sagar Maurya</dc:creator>
      <pubDate>Sun, 26 Jul 2026 15:15:12 +0000</pubDate>
      <link>https://dev.to/sagarmaurya/ouroboros-ai-we-made-a-fake-agent-break-itself-then-built-something-that-fixes-it-4akk</link>
      <guid>https://dev.to/sagarmaurya/ouroboros-ai-we-made-a-fake-agent-break-itself-then-built-something-that-fixes-it-4akk</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;By Sagar Maurya &amp;amp; Disha Sonowal — WeMakeDevs SigNoz Hackathon&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you're just landing on this series for the first time, here's the short version of where we've been.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://dev.to/dishasonowal/we-traced-a-fake-ai-agent-before-building-a-real-one-heres-what-broke-1e7d"&gt;our first post&lt;/a&gt;, we installed a tool called SigNoz for the very first time, so we could watch what a piece of software is doing while it runs — which parts are slow, which parts fail, and why. We built a tiny fake AI agent, and just by looking at a picture of its actions laid out in order, we could instantly see that one single step was eating up 85% of the total time. That was the moment this whole thing clicked for us.&lt;/p&gt;

&lt;p&gt;In &lt;a href="https://dev.to/sagarmaurya/we-asked-signoz-a-question-and-it-actually-answered-p6o"&gt;our second post&lt;/a&gt;, we went further. We built a slightly smarter fake agent and asked SigNoz a real question: "does this get slower when it has more information to look through?" We didn't calculate the answer ourselves. We just told SigNoz what to group and average, and it handed us a table proving the pattern, clean as anything.&lt;/p&gt;

&lt;p&gt;Both of those were practice. Small, safe experiments before the real hackathon clock started ticking. This post is about what we actually built once it did — and honestly, it's the post we're proudest of, because it's the one where we stopped just &lt;em&gt;watching&lt;/em&gt; our fake agent and started building something that &lt;em&gt;does something about it&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;We're calling the project &lt;strong&gt;Ouroboros AI&lt;/strong&gt;. Repo's here if you want to poke around: &lt;a href="https://github.com/mauryasagar/ouroboros-ai" rel="noopener noreferrer"&gt;github.com/mauryasagar/ouroboros-ai&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem that was quietly bugging us
&lt;/h2&gt;

&lt;p&gt;Right after we published that second post, something about it kept nagging at us.&lt;/p&gt;

&lt;p&gt;We'd asked SigNoz a good question and gotten a good answer: yes, more documents means a slower response, and it climbs in an almost perfectly straight line. We felt clever about it for about a day. Then we looked at what we'd actually built and realized... nothing happened next. We saw the pattern, said "yep, makes sense," and closed the browser tab. If this had been a real product used by real people, someone would still have had to &lt;em&gt;notice&lt;/em&gt; that pattern themselves, write it up, wait for an engineer to have time, and fix it — probably days later, and only if they happened to be looking at the right dashboard at the right moment.&lt;/p&gt;

&lt;p&gt;That bothered us more the more we thought about it. Watching something break in slow motion isn't the same as fixing it. So a simple, slightly stubborn question became the whole idea for this project:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if the system could notice its own problem and fix itself, without a person in the middle at all?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not "send someone a faster alert." Actually close the loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  A few words before the story, so nothing feels confusing
&lt;/h2&gt;

&lt;p&gt;We're going to use a handful of words a lot in this post. If you already know them, skip ahead. If you don't, here they are in plain terms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trace&lt;/strong&gt; — a record of everything that happened during one single request, start to finish.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Span&lt;/strong&gt; — one step inside that trace. Four things happened? Four spans.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert&lt;/strong&gt; — a rule you set up that says "if X happens, tell someone."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Webhook&lt;/strong&gt; — instead of "tell someone" meaning a text message or an email, it can mean "call this web address automatically." That's the piece that let a computer react instead of a human.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP (Model Context Protocol)&lt;/strong&gt; — a standard way for an AI model to reach out and use real tools — in our case, letting an AI ask SigNoz real questions instead of us clicking around the dashboard ourselves.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's genuinely all the vocabulary you need. Everything else is just those five ideas, wired together.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we actually decided to build
&lt;/h2&gt;

&lt;p&gt;We sat down together and sketched this out on a shared doc before writing a single line of code. Five steps, in order:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Chaos&lt;/strong&gt; — a fake AI agent runs constantly, and every so often, on purpose, it messes up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traced&lt;/strong&gt; — every single step it takes gets recorded and sent to SigNoz, live.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert&lt;/strong&gt; — SigNoz watches all these traces coming in, notices the mess-up pattern, and automatically fires off a webhook — no human clicks anything.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Heal&lt;/strong&gt; — a separate little program receives that webhook and retries the failed thing with better settings. Still no human.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Explain&lt;/strong&gt; — an AI "Sidekick" you can literally chat with, which reads the real SigNoz data through MCP and tells you, in plain English, what just happened.&lt;/li&gt;
&lt;/ol&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%2Fmejtgjzyagktsdls0thw.jpg" 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%2Fmejtgjzyagktsdls0thw.jpg" alt="Ouroboros AI architecture diagram showing Agent Workload, SigNoz Observability Engine, Auto-Healer Service, and AI Diagnostic Sidekick" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Steps 1 and 2 were a more serious version of what we'd already built in post two. Steps 3, 4, and 5 didn't exist anywhere yet. That's where basically the entire week went.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step one: giving our fake agent something real to fail at
&lt;/h2&gt;

&lt;p&gt;Our agent from post two never actually &lt;em&gt;failed&lt;/em&gt; — it just got randomly slower or faster each time. That's fine for a screenshot, but it's useless for an alert. You can't tell a computer "notice when things feel kind of slow sometimes." You need something crisp: a clear line that gets crossed.&lt;/p&gt;

&lt;p&gt;So we gave our agent one specific way to break: &lt;strong&gt;context overload&lt;/strong&gt;. In plain terms — our agent normally looks through somewhere between 1 and 8 "documents" to answer a question. But 20% of the time, on purpose, we let it get buried under 15 documents at once, which is way more than it can handle cleanly.&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;retrieve_context&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;is_chaos_mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;tracer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start_as_current_span&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;retrieve_context&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# CHAOS MODE: 15 docs, NORMAL: 1-8 docs
&lt;/span&gt;        &lt;span class="n"&gt;context_docs&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;is_chaos_mode&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_attribute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;llm.context_docs&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context_docs&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sleep&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;uniform&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mf"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mock context data (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;context_docs&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; docs)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F896eycflh6tqrjthz9vb.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%2F896eycflh6tqrjthz9vb.png" alt="SigNoz traces explorer showing live spans from deep-agent-service including llm_call and retrieve_context" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We picked this specific failure on purpose, not randomly. Real AI agents that search through documents actually run into this exact problem — feed them too much information at once, and they get slower, cost more, and often don't even answer better for it. We wanted our fake failure to be one that real systems actually have, not something we made up just to have a demo.&lt;/p&gt;

&lt;p&gt;When the overload happens, we don't just log it as "a bit slow." We mark it as an actual error, with a clear message SigNoz can watch for:&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;if&lt;/span&gt; &lt;span class="n"&gt;context_docs&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;CONTEXT_OVERLOAD: Agent failed. Used &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;tokens&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; tokens, cost $&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cost&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;, took &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;delay&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;s.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;set_status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nc"&gt;Status&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;StatusCode&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ERROR&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Context Overload&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One small thing from post two turned out to matter a lot here: we'd mentioned back then that just printing something to your terminal doesn't automatically send it to SigNoz — you have to specifically wire up your logs to go there too, separately from your traces. This time, we made sure that was working properly from day one, because our whole alert depended on SigNoz actually being able to &lt;em&gt;see&lt;/em&gt; that error message, not just a slightly-slower-than-usual span.&lt;/p&gt;

&lt;p&gt;We let this fake agent run forever in the background, quietly sending a new trace every 200 milliseconds, so there was always something fresh happening while we built the rest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step three and four: teaching the system to fix itself
&lt;/h2&gt;

&lt;p&gt;This is the part that didn't exist in either of our earlier posts, and honestly, the part we're most excited about.&lt;/p&gt;

&lt;p&gt;The good news is, we didn't have to build anything fancy to make SigNoz &lt;em&gt;watch&lt;/em&gt; for the failure — it already does that with alert rules, the exact same feature we used in post one to watch for slow calls. The only difference is where the alert points. Instead of sending a Slack message or an email, we pointed it at a &lt;strong&gt;webhook&lt;/strong&gt; — a plain web address that SigNoz calls automatically the moment it sees the problem.&lt;/p&gt;

&lt;p&gt;On the other end of that web address, we built a tiny program whose only job is to sit there, wait, and fix things when it gets called:&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="nd"&gt;@app.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/webhook&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;methods&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;POST&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;webhook&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="p"&gt;{}&lt;/span&gt;
    &lt;span class="n"&gt;alert_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;data&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;alertname&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;Unknown Alert&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;🚨 ALERT RECEIVED FROM SIGNOZ: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;alert_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;optimized_llm_call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Auto-healed request&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;span&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_event&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;AUTO-HEAL SUCCESS&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;attributes&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;message&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;Request auto-healed with optimized parameters&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;status&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;healed&lt;/span&gt;&lt;span class="sh"&gt;"&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;jsonify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&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;healed&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="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;}),&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F3pjypzmweeq1qot275qu.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%2F3pjypzmweeq1qot275qu.png" alt="SigNoz service list showing deep-agent-service and auto-healer-service with P99 latency and error rate" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The actual fix is simple on purpose — it retries the request with a smaller, safer amount of information instead of the overload amount. The part we spent real time thinking about wasn't the fix itself, though. It was this question: &lt;strong&gt;should the fix be invisible, or should it leave a trace of its own?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We almost let it be invisible — quietly patch things up in the background and move on. But that felt like exactly the thing we were trying to get away from in the first place: a fix that only lives in someone's head, not in the system. So we made the healer trace its own retry too, tag it clearly as an auto-heal, and record an event that says, plainly, "this got fixed automatically." Now the healing itself shows up in SigNoz right next to the failure that caused it. Nobody has to remember it happened. The system remembers for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step five: teaching an AI to explain all of it in plain English
&lt;/h2&gt;

&lt;p&gt;Here's where post two's biggest lesson came back around. Back then, we discovered that if you tag your data with the right detail, SigNoz can answer real questions for you — no manual math required. The bigger question that kept nagging at us afterward was: what if you didn't even need to know which button to click, or which filter to type? What if you could just &lt;em&gt;ask&lt;/em&gt;, like you're talking to a person?&lt;/p&gt;

&lt;p&gt;That question is what led us into MCP — the protocol that lets an AI model reach out and actually use tools, instead of just talking. Neither of us had touched MCP before this hackathon, so before writing any code, we spent a real evening just reading about how it works. That reading turned out to save us a lot of pain later, even though it didn't save us from all of it.&lt;/p&gt;

&lt;p&gt;What we ended up building is a small chat app we call the &lt;strong&gt;Sidekick&lt;/strong&gt;. You type a question, and behind the scenes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You type a question
   → Groq (the AI model) decides which tool it needs
   → it asks SigNoz for the real data through MCP
   → the real numbers come back
   → the AI reads them and answers you in plain English
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SigNoz's MCP connection offers over 40 different tools it can use — way more than we needed — so we limited our Sidekick to five: list services, get traces, get logs, get metrics, get one specific span. Simple, focused, and cheap to run.&lt;/p&gt;

&lt;p&gt;Getting this actually working took two separate evenings of head-scratching, and both problems were the sneaky kind — nothing crashed, things just quietly didn't work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The first problem:&lt;/strong&gt; our AI would just never use any tools. It would answer vaguely instead of actually checking real data, no matter how directly we asked it something like "what services are running right now." We spent a while assuming the AI itself was being stubborn, tweaking our instructions to it, before we finally printed out exactly what we were sending it — and found out the tool descriptions we were passing along were completely empty. Turns out SigNoz describes its tools using a label called &lt;code&gt;inputSchema&lt;/code&gt;, while the AI model we were using expects a label called &lt;code&gt;parameters&lt;/code&gt;. We were only checking for one of the two. The fix was a single line of code, but finding it meant working backwards through several layers of "this should be working" first:&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;schema&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tool&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;inputSchema&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;tool&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;parameters&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&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;object&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;properties&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;&lt;strong&gt;The second problem&lt;/strong&gt; was stranger. The very first request would work perfectly, and then the second one would get flatly rejected — every time. It took a while to notice that the server hands you an invisible little "session ID" the first time you connect, and expects you to send it back on every request after that, like a wristband at an event. Miss that, and it treats you like a stranger who just walked in:&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;sid&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;headers&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;Mcp-Session-Id&lt;/span&gt;&lt;span class="sh"&gt;"&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;sid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;self&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;session_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sid&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On top of that, some answers came back in a slightly unusual format made for streaming data, instead of a plain, simple response — so our little connector had to learn to handle both.&lt;/p&gt;

&lt;p&gt;None of this felt exciting while it was happening. It was two nights of adding print statements, staring at raw technical details, and slowly ruling things out one at a time. But the moment both fixes were in, the payoff was immediate. Post two's big win was clicking through a filter and a group-by to get a table. This time, the same kind of insight just... showed up, after typing a normal sentence:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Which services are currently being monitored in SigNoz?"&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"answer"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"The services currently being monitored are:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- auto-healer-service — 1 trace in the last hour (avg ~494ms)&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- deep-agent-service — 688 traces in the last hour (avg ~1.63s)"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"tools_used"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"signoz_list_services"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F0zya6vmsgnwq2byzbcnt.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%2F0zya6vmsgnwq2byzbcnt.png" alt="Ouroboros AI Sidekick chat interface answering a question about deep-agent-service traces using real SigNoz data" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We kept the AI's instructions short and strict on purpose — answer in a few sentences, use the real numbers you found, don't waste time asking for logins it already has. It's meant to feel like a fast, useful teammate answering a quick question, not a general chatbot rambling.&lt;/p&gt;

&lt;h2&gt;
  
  
  The moment it actually came together
&lt;/h2&gt;

&lt;p&gt;Here's the part that felt like more than just code working.&lt;/p&gt;

&lt;p&gt;We finally let all three pieces run at the same time and just watched. In one window, the fake agent quietly sending traces every 200 milliseconds, like it had been doing for days. In another, the Sidekick sitting there, waiting for a question. And then, in the third window — completely on its own, with nobody typing a single command — the healer suddenly printed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;🚨 ALERT RECEIVED FROM SIGNOZ
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We hadn't triggered that. SigNoz had caught the overload pattern by itself, in the live stream of data, and called the webhook on its own.&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%2Fgpfcj7are1ruefhfg4as.jpg" 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%2Fgpfcj7are1ruefhfg4as.jpg" alt="Ouroboros AI landing page showing the self-healing incident timeline: context overload detected, span exported to SigNoz" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's the moment this stopped being a demo we were operating and started being a system that was actually running itself.&lt;/p&gt;

&lt;p&gt;About thirty seconds later, we asked the Sidekick what had just happened, half-expecting to have to nudge it toward the right answer. We didn't need to. It described the overload, the automatic retry, and the corrected numbers, pulled straight from the same live data we'd watched land in SigNoz seconds earlier. That was the entire five-step loop, closing itself, start to finish, with nobody standing in the middle of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we're taking away from all three posts
&lt;/h2&gt;

&lt;p&gt;Post one taught us that just &lt;em&gt;seeing&lt;/em&gt; where the time goes changes how you think about a problem. Post two taught us that tagging the right detail turns a dashboard into something you can actually have a conversation with. This project is where those two lessons stopped being separate little discoveries and turned into one real habit: instrument things not just to log what's easy right now, but to answer the question you'll actually want answered later — because that same detail is what lets an alert fire cleanly, and what lets an AI explain the whole story back to you without you writing a single extra line of code for it.&lt;/p&gt;

&lt;p&gt;If someone asked us what we'd tell ourselves before starting this hackathon, it's that one sentence. Everything else — the failures, the debugging nights, the late realization that our first agent needed to actually break instead of just wobble — all came from following that one idea seriously enough to build around it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Full code, the landing page, and everything else is in the repo: &lt;a href="https://github.com/mauryasagar/ouroboros-ai" rel="noopener noreferrer"&gt;github.com/mauryasagar/ouroboros-ai&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;By Sagar Maurya &amp;amp; Disha Sonowal — WeMakeDevs SigNoz Hackathon&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>signoz</category>
      <category>wemakedevs</category>
      <category>agents</category>
      <category>hackathon</category>
    </item>
    <item>
      <title>We Asked SigNoz a Question, and It Actually Answered</title>
      <dc:creator>Sagar Maurya</dc:creator>
      <pubDate>Sun, 19 Jul 2026 16:51:23 +0000</pubDate>
      <link>https://dev.to/sagarmaurya/we-asked-signoz-a-question-and-it-actually-answered-p6o</link>
      <guid>https://dev.to/sagarmaurya/we-asked-signoz-a-question-and-it-actually-answered-p6o</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;By Sagar Maurya &amp;amp; Disha Sonowal — WeMakeDevs SigNoz Hackathon&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Before this, we wrote a &lt;a href="https://dev.to/dishasonowal/we-traced-a-fake-ai-agent-before-building-a-real-one-heres-what-broke-1e7d"&gt;first post&lt;/a&gt; about setting up SigNoz for the very first time — installing it, sending it some data, and figuring out what all this "tracing" stuff actually means. You can also check that out on &lt;a href="https://www.linkedin.com/posts/disha-sonowal-95831a29b_we-traced-a-fake-ai-agent-before-building-activity-7481685838620372992-OWeV" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;. If you're new to any of this, that post explains the basics in a simple way, so it's worth a quick look first.&lt;/p&gt;

&lt;p&gt;This post is us going one step further as a team. We wanted to see if SigNoz could actually help us &lt;em&gt;discover&lt;/em&gt; something, not just show us pretty charts. It did, and here's exactly what happened, explained simply.&lt;/p&gt;

&lt;h2&gt;
  
  
  First, two words you need to know
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trace&lt;/strong&gt; — a record of everything that happened during one single request, from the moment it starts to the moment it finishes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Span&lt;/strong&gt; — one step inside that trace. If a request does 4 things, it has 4 spans, one for each step.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's really all you need to follow along.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we built
&lt;/h2&gt;

&lt;p&gt;A small fake AI assistant. Instead of doing just one thing, it does four things every time someone asks it a question:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Look up some documents&lt;/strong&gt; — pretend to search for information related to the question (a random number, somewhere between 1 and 8 documents)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask the AI&lt;/strong&gt; — pretend to send the question and those documents to an AI model and get an answer back&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use a tool&lt;/strong&gt; — pretend to use something like a calculator, a calendar, or a search tool&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean up the answer&lt;/strong&gt; — tidy up the final response before sending it back&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We wrapped each of these four steps in code that tells SigNoz "hey, this step just started" and "hey, this step just finished." That's what creates the spans.&lt;/p&gt;

&lt;h2&gt;
  
  
  Looking at just one question it answered
&lt;/h2&gt;

&lt;p&gt;We ran our fake assistant 30 times, and then picked one single run to look at closely in SigNoz. Here's what it showed us:&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%2Fx1i4jvh7ghleiti3p3eq.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%2Fx1i4jvh7ghleiti3p3eq.png" alt="flame graph, handle_request 1.72s, llm_call 1.43s" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The whole thing took 1.72 seconds. Almost all of that — 1.43 seconds — was spent in the "ask the AI" step. Everything else (looking up documents, using a tool, cleaning up) barely took any time at all in comparison. You can literally see this with your eyes on the chart, no reading through code needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then we asked a bigger question
&lt;/h2&gt;

&lt;p&gt;Looking at one run is useful, but we wanted to know something bigger: &lt;strong&gt;does the AI step get slower when it has more documents to look through?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In real life, this makes sense — if you ask an AI to read through 8 documents instead of 1, it usually takes longer to answer, because there's more for it to process.&lt;/p&gt;

&lt;p&gt;So instead of checking each of our 30 runs one by one, we asked SigNoz to do the work for us:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;We told it: "only show me the AI-call steps, ignore the other three"&lt;/li&gt;
&lt;li&gt;We told it: "now group these by how many documents each one used"&lt;/li&gt;
&lt;li&gt;We told it: "show me the average time for each group"&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;And within seconds, SigNoz gave us this table:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Documents used&lt;/th&gt;
&lt;th&gt;Average time taken&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;568ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2&lt;/td&gt;
&lt;td&gt;658ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;3&lt;/td&gt;
&lt;td&gt;825ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4&lt;/td&gt;
&lt;td&gt;999ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;5&lt;/td&gt;
&lt;td&gt;1147ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;6&lt;/td&gt;
&lt;td&gt;1333ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;7&lt;/td&gt;
&lt;td&gt;1488ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;8&lt;/td&gt;
&lt;td&gt;1614ms&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&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%2Frahttpjgaufc3d2n3mt5.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%2Frahttpjgaufc3d2n3mt5.png" alt="grouped table" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Look at that — it climbs almost perfectly evenly. Every extra document adds roughly 150 milliseconds to the response time. We built this rule into our code, so finding it wasn't a total surprise, but what genuinely impressed us was &lt;em&gt;how easily&lt;/em&gt; SigNoz found and displayed it. We didn't write any extra code, we didn't open Excel, we didn't do any manual math. Just a couple of clicks, and the whole pattern was right there in a table.&lt;/p&gt;

&lt;h2&gt;
  
  
  We also checked the logs
&lt;/h2&gt;

&lt;p&gt;Traces are great for timing, but sometimes you just want to read a plain sentence about what happened. That's what logs are for. We turned those on too, and got results like this:&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%2Fn5sldhfsjklh87lkpyrn.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%2Fn5sldhfsjklh87lkpyrn.png" alt="logs showing entries like " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now every request has two views: the trace shows &lt;em&gt;how long&lt;/em&gt; things took and &lt;em&gt;in what order&lt;/em&gt;, while the logs show &lt;em&gt;what actually happened&lt;/em&gt;, in plain readable sentences. Small tip if you try this yourself — just printing messages to your terminal doesn't automatically send them to SigNoz. You need a couple of extra lines of setup code to actually connect them, or nothing will show up in the Logs tab.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we're taking away from this
&lt;/h2&gt;

&lt;p&gt;The biggest thing we learned: a trace waterfall is great for spotting &lt;em&gt;what's&lt;/em&gt; slow. But the real magic happened when we tagged our own extra detail onto a span — in our case, "how many documents did this use." That one small addition is what let us ask SigNoz a real question and get a real answer back, across all 30 runs at once, instead of guessing.&lt;/p&gt;

&lt;p&gt;For the actual hackathon build, this is exactly the habit we want to carry forward — don't just time your code, tag it with details that'll actually matter later when something's slow and you're trying to figure out why.&lt;/p&gt;

</description>
      <category>signoz</category>
      <category>wemakedevs</category>
      <category>agents</category>
      <category>hackathon</category>
    </item>
    <item>
      <title>Data Isn't What Your Textbook Said It Was</title>
      <dc:creator>Sagar Maurya</dc:creator>
      <pubDate>Sat, 11 Jul 2026 02:13:37 +0000</pubDate>
      <link>https://dev.to/sagarmaurya/data-isnt-what-your-textbook-said-it-was-3df8</link>
      <guid>https://dev.to/sagarmaurya/data-isnt-what-your-textbook-said-it-was-3df8</guid>
      <description>&lt;h3&gt;
  
  
  &lt;em&gt;A beginner-friendly breakdown of what data really is, where it comes from, and why it matters more than you think.&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;br&gt;&lt;br&gt;
You woke up this morning and checked your phone.&lt;/p&gt;

&lt;p&gt;You scrolled through Instagram. Opened WhatsApp. Maybe checked the weather. Ordered breakfast on Swiggy.&lt;/p&gt;

&lt;p&gt;By the time you finished your morning tea, you had already generated hundreds of data points — and that was before 9 AM.&lt;/p&gt;

&lt;p&gt;We live in a world that runs on data. But most people, including a lot of CS students, have never stopped to ask: &lt;strong&gt;what actually is data?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not the textbook definition. The real one.&lt;/p&gt;

&lt;p&gt;And that's exactly the problem — we all learned about data from a textbook. Which means we learned about it wrong.&lt;/p&gt;


&lt;h2&gt;
  
  
  The Textbook Lie
&lt;/h2&gt;

&lt;p&gt;Ask anyone what data is and they'll say something like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Data is raw, unprocessed facts and figures."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Technically correct. Completely useless.&lt;/p&gt;

&lt;p&gt;That definition tells you nothing about why data matters, where it comes from, or what makes it powerful. It's the kind of definition written for an exam, not for understanding.&lt;/p&gt;

&lt;p&gt;So let's close the textbook and start over.&lt;/p&gt;


&lt;h2&gt;
  
  
  Data is Just a Record of Something That Happened
&lt;/h2&gt;

&lt;p&gt;Every time something happens in the real world — a click, a purchase, a step you walked, a message you sent — there's a possibility of recording it.&lt;/p&gt;

&lt;p&gt;When you record it? That's data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You clicked on a product → &lt;strong&gt;data&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Your phone counted 6,400 steps today → &lt;strong&gt;data&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You paused a YouTube video at 2:34 → &lt;strong&gt;data&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You left a website after 3 seconds → &lt;strong&gt;data&lt;/strong&gt; (and a headache for that website's owner)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data is just a trace that something happened. That's it.&lt;/p&gt;

&lt;p&gt;The interesting part is what happens &lt;em&gt;after&lt;/em&gt; you collect those traces.&lt;/p&gt;


&lt;h2&gt;
  
  
  Raw Data is Almost Always Ugly
&lt;/h2&gt;

&lt;p&gt;Here's what nobody tells beginners: data in the real world is messy.&lt;/p&gt;

&lt;p&gt;Imagine a Google Form that asks for someone's phone number. You'll get responses like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;9876543210
+91-9876543210
98765 43210
9876543210 (call after 6pm)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All four people gave you the same number. But to a computer, these are four completely different values.&lt;/p&gt;

&lt;p&gt;This is what's called &lt;strong&gt;dirty data&lt;/strong&gt; — and cleaning it is genuinely one of the most important (and underrated) skills in the data field.&lt;/p&gt;

&lt;p&gt;A famous saying in data science is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"80% of data work is cleaning. The other 20% is complaining about cleaning."&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's a joke. But not really.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Journey of Data: From Noise to Decision
&lt;/h2&gt;

&lt;p&gt;Here's a simple way to think about how data travels:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Something happens
      ↓
It gets recorded (raw data)
      ↓
It gets cleaned (processed data)
      ↓
It gets analyzed (insights)
      ↓
Someone makes a decision
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's make this real.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example:&lt;/strong&gt; Swiggy wants to know why orders drop on Tuesday evenings.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;They collect order timestamps → &lt;em&gt;raw data&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;They remove duplicates, fix timezone errors → &lt;em&gt;clean data&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;They spot that Tuesday 7–9 PM has 40% fewer orders → &lt;em&gt;insight&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;They run a Tuesday evening discount campaign → &lt;em&gt;decision&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That entire chain? It all started with someone pressing "Order" on their phone.&lt;/p&gt;




&lt;h2&gt;
  
  
  Not All Data is Numbers
&lt;/h2&gt;

&lt;p&gt;A common misconception is that data means spreadsheets full of numbers. But data comes in many forms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Structured data&lt;/strong&gt; — rows and columns, like a CSV or a database table. Easy for computers to process.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unstructured data&lt;/strong&gt; — text, images, audio, video. Harder to process, but far more common in the real world.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Semi-structured data&lt;/strong&gt; — like JSON or XML. Has some structure, but not rigid rows and columns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When you send a WhatsApp message, that's unstructured data. When your bank logs a transaction, that's structured data. When you fill a Google Form, that produces semi-structured data.&lt;/p&gt;

&lt;p&gt;Most of the world's data — over 80% of it — is unstructured. Which is why fields like NLP (Natural Language Processing) and Computer Vision exist: to make sense of data that doesn't fit neatly into a table.&lt;/p&gt;




&lt;h2&gt;
  
  
  Your Data is Someone's Product
&lt;/h2&gt;

&lt;p&gt;Here's the uncomfortable truth.&lt;/p&gt;

&lt;p&gt;Every free app you use — Instagram, Google, YouTube — is free because &lt;em&gt;you&lt;/em&gt; are not the customer. You're the product. More precisely, your data is.&lt;/p&gt;

&lt;p&gt;When you like a post, skip an ad, or spend 45 minutes on Reels instead of 5, that behavior is recorded, analyzed, and used to serve you more content that keeps you on the platform longer.&lt;/p&gt;

&lt;p&gt;This isn't conspiracy theory. It's just the data pipeline at scale.&lt;/p&gt;

&lt;p&gt;Understanding this doesn't mean you need to delete all your apps. But it does mean you should be aware of the trade you're making — your attention and behavior in exchange for a free service.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Everyone Should Care About Data (Not Just Data Scientists)
&lt;/h2&gt;

&lt;p&gt;You don't need to work in data to benefit from understanding it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;As a developer&lt;/strong&gt; — you'll build systems that generate data. Understanding data helps you design better databases and APIs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;As a product person&lt;/strong&gt; — decisions without data are just opinions. Data makes arguments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;As a user&lt;/strong&gt; — knowing how your data is used makes you a more informed digital citizen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;As a student preparing for placements&lt;/strong&gt; — almost every tech company today is a data company in some way. Interviews increasingly involve data thinking, even for SDE roles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Data literacy is becoming as fundamental as being able to read and write.&lt;/p&gt;




&lt;h2&gt;
  
  
  So What Did Your Textbook Get Wrong?
&lt;/h2&gt;

&lt;p&gt;Nothing, technically. But everything, practically.&lt;/p&gt;

&lt;p&gt;Your textbook gave you a definition of data that would pass an exam. It didn't give you a mental model that would help you think about the world differently.&lt;/p&gt;

&lt;p&gt;The difference between a student who "knows data" and someone who &lt;em&gt;understands&lt;/em&gt; it is this: one memorized a definition, the other sees data everywhere they look — in the apps they use, the decisions companies make, and the systems they build.&lt;/p&gt;

&lt;p&gt;That shift in perspective is what this blog is about. Not definitions. Mental models.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where to Go From Here
&lt;/h2&gt;

&lt;p&gt;This post was just the surface. In future posts, I'll go deeper into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How databases store and retrieve data efficiently&lt;/li&gt;
&lt;li&gt;What actually happens when you run a SQL query&lt;/li&gt;
&lt;li&gt;The difference between a data analyst, data engineer, and data scientist&lt;/li&gt;
&lt;li&gt;And some hands-on projects that helped me understand all of this better&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're a student or someone just getting into tech — I hope this gave you a clearer mental model of what data actually is.&lt;/p&gt;

&lt;p&gt;Because before you can work with data, you need to understand what you're actually working with.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Thanks for reading! If you found this useful, drop a reaction or share it with someone who's just getting started in tech.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>data</category>
      <category>career</category>
      <category>learning</category>
    </item>
  </channel>
</rss>
