<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>distributed-systems on Dhaval Shah</title><link>https://www.dhaval-shah.com/tags/distributed-systems/</link><description>Recent content in distributed-systems on Dhaval Shah</description><generator>Hugo -- gohugo.io</generator><lastBuildDate>Mon, 29 Jun 2026 01:00:50 +0000</lastBuildDate><atom:link href="https://www.dhaval-shah.com/tags/distributed-systems/index.xml" rel="self" type="application/rss+xml"/><item><title>Billion User Trap - The Pagination Mistake That Can Take Down Your Database</title><link>https://www.dhaval-shah.com/billion-user-pagination-db-design/</link><pubDate>Mon, 29 Jun 2026 01:00:50 +0000</pubDate><guid>https://www.dhaval-shah.com/billion-user-pagination-db-design/</guid><description>Background In Part 1, we established that access patterns &amp;amp; not entities should drive your design. In Part 2, we fixed the database by replacing brittle three-table JOINs with a covering index, reducing P99 on the listing query. The schema was right. The index was right. The listing API itself was fast. And then it quietly started taking the database down - not because of a bad query, but because of how that fast query was being paginated.</description></item><item><title>The GC Summary Report Wasn't Wrong - It Just Wasn't Complete</title><link>https://www.dhaval-shah.com/gc-comparison-ai-review/</link><pubDate>Sun, 21 Jun 2026 02:00:50 +0000</pubDate><guid>https://www.dhaval-shah.com/gc-comparison-ai-review/</guid><description>Background My old article compared Virtual Thread based implementations of Spring Core Reactor and JDK 21, building on the comparative analysis before it. Both articles measured the usual things - total processing time, memory footprint, GC pauses, CPU time - and both relied on the summary report generated by GCEasy.
The conclusion from that data was straightforward: JDK based implementation requires more GC activity and a heavier memory footprint, but this does not have any significant impact on application performance.</description></item><item><title>Billion User Trap - The Database Design That Looked Perfect on Day One</title><link>https://www.dhaval-shah.com/billion-user-trap-db-design/</link><pubDate>Tue, 16 Jun 2026 02:00:50 +0000</pubDate><guid>https://www.dhaval-shah.com/billion-user-trap-db-design/</guid><description>Background In the first part we established the foundational principle that separates systems which survive scale from systems that collapse under it - design for access patterns, not for entities.
In this second part we double click on the database design of the User Profile system and try to understand its impact from performance engineering and scalability standpoint. Specifically - why the schema that adheres to proper normalization, proper foreign keys, and proper indexes, becomes a latency problem.</description></item><item><title>Three Fintech Architecture Post-Mortems - What AI-Augmented Review Would Have Caught</title><link>https://www.dhaval-shah.com/fintech-post-mortem-ai-review/</link><pubDate>Thu, 11 Jun 2026 02:00:50 +0000</pubDate><guid>https://www.dhaval-shah.com/fintech-post-mortem-ai-review/</guid><description>Background Architecture decisions rarely break at design time. They break a year later, under double the load, when an unwritten assumption proves false. I’ve seen this play out in synchronous coupling, storage models, and service splits - while architecting and designing FinTech platforms. That’s why I now run every major design decision through an AI-augmented review process.
What follows are three post‑mortems from real payment systems - and the simple prompts that would have flagged each failure before it hit production.</description></item></channel></rss>