<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Jayavignesh Blog</title>
  <description>Backend engineering and cloud architecture insights by Jayavignesh (JV).</description>
  <link>https://jayavignesh.dev/blog/</link>
  <atom:link href="https://jayavignesh.dev/feed.xml" rel="self" type="application/rss+xml" />
  <lastBuildDate>Sat, 04 Jul 2026 16:10:02 GMT</lastBuildDate>
  <pubDate>Sat, 04 Jul 2026 16:10:02 GMT</pubDate>
  <ttl>1800</ttl>
    <item>
      <title><![CDATA[Java Upgrades Are Architectural Events]]></title>
      <description><![CDATA[Upgrading Java is never just about the JVM. It exposes architectural weaknesses, hidden coupling, and long-standing assumptions.]]></description>
      <link>https://jayavignesh.dev/blog/java-upgrades-architectural-events/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/java-upgrades-architectural-events/</guid>
      <pubDate>Sun, 29 Mar 2026 05:42:32 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Mocking Everything Is a Design Smell]]></title>
      <description><![CDATA[If every dependency needs mocking, the design is already lying. This post explains when mocks help — and when they hurt.]]></description>
      <link>https://jayavignesh.dev/blog/mocking-everything-is-a-design-smell/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/mocking-everything-is-a-design-smell/</guid>
      <pubDate>Thu, 21 Aug 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Why Java 8 Still Runs Half the World]]></title>
      <description><![CDATA[New LTS versions exist — yet Java 8 refuses to die. This post explains enterprise risk, tooling inertia, and why upgrades are rarely just technical.]]></description>
      <link>https://jayavignesh.dev/blog/why-java-8-still-runs-half-the-world/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/why-java-8-still-runs-half-the-world/</guid>
      <pubDate>Fri, 03 Oct 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[JPA Is Not Slow — Your Mental Model Is]]></title>
      <description><![CDATA[JPA doesn't randomly hit the database. It does exactly what you told it to do. This post fixes common ORM misconceptions at code level.]]></description>
      <link>https://jayavignesh.dev/blog/jpa-is-not-slow-your-mental-model-is/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/jpa-is-not-slow-your-mental-model-is/</guid>
      <pubDate>Tue, 14 Oct 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[When Microservices Become an Organizational Bug]]></title>
      <description><![CDATA[Microservices don't fail at scale — teams do. A blunt look at when service boundaries increase complexity, slow delivery, and hide responsibility.]]></description>
      <link>https://jayavignesh.dev/blog/when-microservices-become-an-organizational-bug/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/when-microservices-become-an-organizational-bug/</guid>
      <pubDate>Fri, 05 Dec 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Clean Code Alone Doesn't Survive Production]]></title>
      <description><![CDATA[Clean code is readable. Production code is negotiable under pressure. This post explores the gap between theory and reality.]]></description>
      <link>https://jayavignesh.dev/blog/clean-code-alone-doesnt-survive-production/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/clean-code-alone-doesnt-survive-production/</guid>
      <pubDate>Fri, 04 Jul 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Why 90% Coverage Still Means Zero Confidence]]></title>
      <description><![CDATA[Coverage measures execution, not correctness. This post explains why high-coverage systems still fear releases, and how to test behavior instead of lines.]]></description>
      <link>https://jayavignesh.dev/blog/why-90-percent-coverage-still-means-zero-confidence/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/why-90-percent-coverage-still-means-zero-confidence/</guid>
      <pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Cognitive Complexity Is a Smell, Not a Metric]]></title>
      <description><![CDATA[Static analysis gives numbers. Production gives pain. This article explains why cognitive complexity always predicts expensive thinking.]]></description>
      <link>https://jayavignesh.dev/blog/cognitive-complexity-is-a-smell-not-a-metric/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/cognitive-complexity-is-a-smell-not-a-metric/</guid>
      <pubDate>Sat, 22 Nov 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[DDoS Is Not a Network Problem]]></title>
      <description><![CDATA[Most DDoS discussions stop at bandwidth. This post explains why application asymmetry and state are the real vulnerabilities.]]></description>
      <link>https://jayavignesh.dev/blog/ddos-is-not-a-network-problem/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/ddos-is-not-a-network-problem/</guid>
      <pubDate>Sat, 02 Aug 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Being a Senior Engineer Is About Saying No]]></title>
      <description><![CDATA[Senior engineers don't write more code. They prevent unnecessary code from existing. This post explains why judgment beats speed.]]></description>
      <link>https://jayavignesh.dev/blog/being-a-senior-engineer-is-about-saying-no/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/being-a-senior-engineer-is-about-saying-no/</guid>
      <pubDate>Tue, 15 Jul 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Spring Boot Magic Ends at the First Incident]]></title>
      <description><![CDATA[Auto-configuration helps — until it hides behavior. This post explains where Spring Boot shines, and where core Spring knowledge becomes mandatory.]]></description>
      <link>https://jayavignesh.dev/blog/spring-boot-magic-ends-at-the-first-incident/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/spring-boot-magic-ends-at-the-first-incident/</guid>
      <pubDate>Mon, 10 Nov 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Why Most Backend APIs Are Designed Backwards]]></title>
      <description><![CDATA[APIs often expose databases instead of intent. This post explains how backend engineers leak internal models, and how to design APIs that survive change.]]></description>
      <link>https://jayavignesh.dev/blog/why-most-backend-apis-are-designed-backwards/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/why-most-backend-apis-are-designed-backwards/</guid>
      <pubDate>Tue, 18 Nov 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Annotations Are Not Magic]]></title>
      <description><![CDATA[@Component doesn't register anything by itself. This article walks through what Spring actually does — from scanning to bean instantiation.]]></description>
      <link>https://jayavignesh.dev/blog/annotations-are-not-magic/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/annotations-are-not-magic/</guid>
      <pubDate>Fri, 19 Sep 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Code Coverage Is Not Test Quality]]></title>
      <description><![CDATA[High coverage numbers often hide fragile systems. This post explains what meaningful tests look like in real backend services and why branches matter more than percentages.]]></description>
      <link>https://jayavignesh.dev/blog/code-coverage-is-not-test-quality/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/code-coverage-is-not-test-quality/</guid>
      <pubDate>Fri, 05 Dec 2025 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Virtual Threads vs. OS Threads in Java 21: A Deep Dive]]></title>
      <description><![CDATA[Understand the fundamental architectural differences between OS-managed platform threads and JVM-managed virtual threads, and when to use each in your Java applications.]]></description>
      <link>https://jayavignesh.dev/blog/virtual-threads-vs-os-threads-java-21/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/virtual-threads-vs-os-threads-java-21/</guid>
      <pubDate>Tue, 26 May 2026 18:57:12 GMT</pubDate>
    </item>
    <item>
      <title><![CDATA[Java 21 Virtual Threads: Infinite Scaling Meets Database Bottlenecks]]></title>
      <description><![CDATA[Virtual threads solve the thread-per-request scaling limit, but they shift the bottleneck directly to your relational database connection pool. Here is why it happens and how to fix it.]]></description>
      <link>https://jayavignesh.dev/blog/java-21-virtual-threads-database-bottlenecks/</link>
      <guid isPermaLink="true">https://jayavignesh.dev/blog/java-21-virtual-threads-database-bottlenecks/</guid>
      <pubDate>Tue, 26 May 2026 18:57:26 GMT</pubDate>
    </item>
</channel>
</rss>