<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Vamsi Krishna Pennam]]></title><description><![CDATA[Vamsi Krishna Pennam]]></description><link>https://vamsikrishnapennam.hashnode.dev</link><image><url>https://cdn.hashnode.com/uploads/logos/69bfbf3c4a1e513e41bd3db4/f07cc2cd-9a1d-4948-ac61-1739a633e669.png</url><title>Vamsi Krishna Pennam</title><link>https://vamsikrishnapennam.hashnode.dev</link></image><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 12:33:59 GMT</lastBuildDate><atom:link href="https://vamsikrishnapennam.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[How We Dropped API Latency from 10 Seconds to 0.47 Seconds Without Touching Infrastructure]]></title><description><![CDATA[Some performance problems are not about the code. They are about where the work is happening.
This is a story about two search APIs that were quietly ruining user experience, and the one architectural]]></description><link>https://vamsikrishnapennam.hashnode.dev/how-we-dropped-api-latency-from-10-seconds-to-0-47-seconds-without-touching-infrastructure</link><guid isPermaLink="true">https://vamsikrishnapennam.hashnode.dev/how-we-dropped-api-latency-from-10-seconds-to-0-47-seconds-without-touching-infrastructure</guid><category><![CDATA[performance-engineering]]></category><category><![CDATA[System Design]]></category><category><![CDATA[Backend Engineering]]></category><category><![CDATA[distributed systems]]></category><category><![CDATA[software architecture]]></category><dc:creator><![CDATA[Vamsi Krishna  Pennam]]></dc:creator><pubDate>Sun, 22 Mar 2026 10:37:12 GMT</pubDate><content:encoded><![CDATA[<p>Some performance problems are not about the code. They are about where the work is happening.</p>
<p>This is a story about two search APIs that were quietly ruining user experience, and the one architectural question that fixed everything.</p>
<p><strong>The Problem</strong></p>
<p>We had 15 APIs in total across a platform. 13 of them were performing well, P95 response times in milliseconds. Clean, fast, no issues.</p>
<p>But two search APIs were consistently showing P95 latency of 8.2 seconds and 10.5 seconds during performance testing. Every time. Under every load pattern.</p>
<p>That kind of consistency is actually useful information. When something fails consistently, it is telling you something specific.</p>
<p><strong>What We Tried First</strong></p>
<p>The usual performance tuning cycle started immediately.</p>
<p>Database query analysis. Network bandwidth checks. Connection pool tuning. Parallelism adjustments. Various configuration experiments.</p>
<p>None of it moved the needle.</p>
<p>When the standard fixes do not work, that is the signal to stop tuning and start investigating the architecture.</p>
<p><strong>Finding the Real Cause</strong></p>
<p>Both APIs shared something in common. Each request depended on a single attribute that had to be fetched from an external system. Everything else in the request was handled locally. But that one attribute required a synchronous call to another service every single time.</p>
<p>During load testing, hundreds of requests were hitting these APIs within a short window. Each request independently called the external system. Even though our own system was well optimised, the response time of that external dependency dominated the overall latency on every single request.</p>
<p>We discussed it with the other team. But sometimes dependencies are outside your control. The system ran this way for quite some time.</p>
<p>Then we asked ourselves a simple question.</p>
<p>What if we did not fetch that attribute during the request at all?</p>
<p><strong>The Fix</strong></p>
<p>We introduced a small table in our own database. It stored just two things. The entity identifier and the required attribute value.</p>
<p>A background process kept this table synchronised with the external system. The data stayed current. But the API no longer needed to make a live call to the other system during request processing.</p>
<p>The request flow became entirely local.</p>
<p><strong>The Result</strong></p>
<p>Search API A: 8.2 seconds down to 0.39 seconds. A 95% reduction.</p>
<p>Search API B: 10.5 seconds down to 0.47 seconds. A 96% reduction.</p>
<p>Zero infrastructure changes. No additional servers. No heavy tuning. No code rewrite.</p>
<p>Just removing a synchronous external dependency from the critical request path.</p>
<p><strong>The Takeaway</strong></p>
<p>When you are chasing a latency problem and nothing is working, ask yourself this before you try the next configuration change.</p>
<p>Is the work happening in the right place?</p>
<p>Sometimes the system is not slow. It is just waiting for someone else. And that is a different problem with a different solution.</p>
<p>Performance tuning is not always about optimising what you have. Sometimes it is about rethinking where the work happens.</p>
]]></content:encoded></item></channel></rss>