<?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" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Nithidol Vacharotayan on Medium]]></title>
        <description><![CDATA[Stories by Nithidol Vacharotayan on Medium]]></description>
        <link>https://medium.com/@nithidol?source=rss-7a4acdec7a4f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*TvG2aQswF2GXMHO9RjvS1g.png</url>
            <title>Stories by Nithidol Vacharotayan on Medium</title>
            <link>https://medium.com/@nithidol?source=rss-7a4acdec7a4f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Thu, 05 Nov 2026 06:11:05 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@nithidol/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Our Redis Lock Expired. The Report Job Kept Running.]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.devgenius.io/our-redis-lock-expired-the-report-job-kept-running-da74e06d263e?source=rss-7a4acdec7a4f------2"><img src="https://cdn-images-1.medium.com/max/1920/1*AudA3aB_5YxRxBribK9lmw.png" width="1920"></a></p><p class="medium-feed-snippet">Two Spring Boot pods processed the same report, exposing the gap between acquiring a lease and controlling work after it expires.</p><p class="medium-feed-link"><a href="https://blog.devgenius.io/our-redis-lock-expired-the-report-job-kept-running-da74e06d263e?source=rss-7a4acdec7a4f------2">Continue reading on Dev Genius »</a></p></div>]]></description>
            <link>https://blog.devgenius.io/our-redis-lock-expired-the-report-job-kept-running-da74e06d263e?source=rss-7a4acdec7a4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/da74e06d263e</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[backend-development]]></category>
            <category><![CDATA[redis]]></category>
            <category><![CDATA[distributed-systems]]></category>
            <dc:creator><![CDATA[Nithidol Vacharotayan]]></dc:creator>
            <pubDate>Tue, 06 Oct 2026 10:17:45 GMT</pubDate>
            <atom:updated>2026-10-06T12:51:33.595Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[When a CSV Download Controls Your PostgreSQL Transaction]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.devgenius.io/when-a-csv-download-controls-your-postgresql-transaction-2b4dc308fb88?source=rss-7a4acdec7a4f------2"><img src="https://cdn-images-1.medium.com/max/1600/1*_sNC8MyjzwkCzCNruL2Bjg.png" width="1600"></a></p><p class="medium-feed-snippet">A proposed Spring Boot reproduction examines how streaming can reduce heap usage while tying database resource lifetimes to a slow client.</p><p class="medium-feed-link"><a href="https://blog.devgenius.io/when-a-csv-download-controls-your-postgresql-transaction-2b4dc308fb88?source=rss-7a4acdec7a4f------2">Continue reading on Dev Genius »</a></p></div>]]></description>
            <link>https://blog.devgenius.io/when-a-csv-download-controls-your-postgresql-transaction-2b4dc308fb88?source=rss-7a4acdec7a4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/2b4dc308fb88</guid>
            <category><![CDATA[java]]></category>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[postgresql]]></category>
            <category><![CDATA[backend-development]]></category>
            <dc:creator><![CDATA[Nithidol Vacharotayan]]></dc:creator>
            <pubDate>Tue, 29 Sep 2026 16:29:04 GMT</pubDate>
            <atom:updated>2026-10-03T13:17:49.072Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Spring Boot Saved the Order. Kafka Never Received the Event.]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.stackademic.com/spring-boot-saved-the-order-kafka-never-received-the-event-a9663b4cfa31?source=rss-7a4acdec7a4f------2"><img src="https://cdn-images-1.medium.com/max/1600/1*2iVT6L9k0IMXSSfXy5yWZg.png" width="1600"></a></p><p class="medium-feed-snippet">How a PostgreSQL&#x2013;Kafka dual write created two versions of success &#x2014; and why a transactional outbox made the failure recoverable.</p><p class="medium-feed-link"><a href="https://blog.stackademic.com/spring-boot-saved-the-order-kafka-never-received-the-event-a9663b4cfa31?source=rss-7a4acdec7a4f------2">Continue reading on Stackademic »</a></p></div>]]></description>
            <link>https://blog.stackademic.com/spring-boot-saved-the-order-kafka-never-received-the-event-a9663b4cfa31?source=rss-7a4acdec7a4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/a9663b4cfa31</guid>
            <category><![CDATA[kafka]]></category>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[postgresql]]></category>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[distributed-systems]]></category>
            <dc:creator><![CDATA[Nithidol Vacharotayan]]></dc:creator>
            <pubDate>Thu, 24 Sep 2026 16:14:52 GMT</pubDate>
            <atom:updated>2026-09-29T13:39:07.389Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Our Load Test Passed Because It Never Triggered Retries]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.stackademic.com/our-load-test-passed-because-it-never-triggered-retries-4f7f0993b2ba?source=rss-7a4acdec7a4f------2"><img src="https://cdn-images-1.medium.com/max/1600/1*8ver0Ms1gElWzNUWlaWP3Q.png" width="1600"></a></p><p class="medium-feed-snippet">How a Spring Boot search API multiplied 300 customer requests into nearly 900 downstream calls &#x2014; and exposed a missing failure mode in our&#x2026;</p><p class="medium-feed-link"><a href="https://blog.stackademic.com/our-load-test-passed-because-it-never-triggered-retries-4f7f0993b2ba?source=rss-7a4acdec7a4f------2">Continue reading on Stackademic »</a></p></div>]]></description>
            <link>https://blog.stackademic.com/our-load-test-passed-because-it-never-triggered-retries-4f7f0993b2ba?source=rss-7a4acdec7a4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/4f7f0993b2ba</guid>
            <category><![CDATA[performance-testing]]></category>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[reliability-engineering]]></category>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[backend-development]]></category>
            <dc:creator><![CDATA[Nithidol Vacharotayan]]></dc:creator>
            <pubDate>Tue, 15 Sep 2026 16:50:30 GMT</pubDate>
            <atom:updated>2026-09-16T14:30:16.464Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[The 20 MB File That Changed Our Spring Boot API]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.stackademic.com/the-20-mb-file-that-changed-our-spring-boot-api-81e9eda57a66?source=rss-7a4acdec7a4f------2"><img src="https://cdn-images-1.medium.com/max/1600/1*gnTJmskcZQjFBar2zR0GOA.png" width="1600"></a></p><p class="medium-feed-snippet">Embedding file content in JSON turned a modest upload into unpredictable heap pressure &#x2014; and showed us that content type is also a&#x2026;</p><p class="medium-feed-link"><a href="https://blog.stackademic.com/the-20-mb-file-that-changed-our-spring-boot-api-81e9eda57a66?source=rss-7a4acdec7a4f------2">Continue reading on Stackademic »</a></p></div>]]></description>
            <link>https://blog.stackademic.com/the-20-mb-file-that-changed-our-spring-boot-api-81e9eda57a66?source=rss-7a4acdec7a4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/81e9eda57a66</guid>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[performance]]></category>
            <category><![CDATA[backend-development]]></category>
            <category><![CDATA[api-design]]></category>
            <dc:creator><![CDATA[Nithidol Vacharotayan]]></dc:creator>
            <pubDate>Tue, 08 Sep 2026 16:59:55 GMT</pubDate>
            <atom:updated>2026-09-09T00:42:18.870Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[PostgreSQL Used the Index. The Query Still Read 8.7 Million Rows.]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.stackademic.com/postgresql-used-the-index-the-query-still-read-8-7-million-rows-a619e9d4497e?source=rss-7a4acdec7a4f------2"><img src="https://cdn-images-1.medium.com/max/1600/1*FOWaRxQHb1Dr1iMZUJFzbQ.png" width="1600"></a></p><p class="medium-feed-snippet">Why an Index Scan gave us false confidence&#x2014;and how earlier filtering reduced the work before an expensive reporting join.</p><p class="medium-feed-link"><a href="https://blog.stackademic.com/postgresql-used-the-index-the-query-still-read-8-7-million-rows-a619e9d4497e?source=rss-7a4acdec7a4f------2">Continue reading on Stackademic »</a></p></div>]]></description>
            <link>https://blog.stackademic.com/postgresql-used-the-index-the-query-still-read-8-7-million-rows-a619e9d4497e?source=rss-7a4acdec7a4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/a619e9d4497e</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[sql]]></category>
            <category><![CDATA[postgresql]]></category>
            <category><![CDATA[backend-development]]></category>
            <category><![CDATA[database-performance]]></category>
            <dc:creator><![CDATA[Nithidol Vacharotayan]]></dc:creator>
            <pubDate>Wed, 02 Sep 2026 07:05:14 GMT</pubDate>
            <atom:updated>2026-09-03T11:45:38.471Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Our Server Was Healthy. Our Connection Pool Was Exhausted.]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.stackademic.com/our-server-was-healthy-our-connection-pool-was-exhausted-d1db610a224f?source=rss-7a4acdec7a4f------2"><img src="https://cdn-images-1.medium.com/max/1600/1*0O9Lssa_DnALQxKsecasyA.png" width="1600"></a></p><p class="medium-feed-snippet">How Oracle connection occupancy made a responsive Spring Boot service unusable &#x2014; and why the fix required both query efficiency and&#x2026;</p><p class="medium-feed-link"><a href="https://blog.stackademic.com/our-server-was-healthy-our-connection-pool-was-exhausted-d1db610a224f?source=rss-7a4acdec7a4f------2">Continue reading on Stackademic »</a></p></div>]]></description>
            <link>https://blog.stackademic.com/our-server-was-healthy-our-connection-pool-was-exhausted-d1db610a224f?source=rss-7a4acdec7a4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/d1db610a224f</guid>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[database-performance]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[oracle-database]]></category>
            <category><![CDATA[performance-engineering]]></category>
            <dc:creator><![CDATA[Nithidol Vacharotayan]]></dc:creator>
            <pubDate>Wed, 26 Aug 2026 09:42:02 GMT</pubDate>
            <atom:updated>2026-08-26T09:42:02.483Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[PostgreSQL Was Fast. Our Spring Boot API Still Ran Out of Memory!]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.stackademic.com/postgresql-was-fast-our-spring-boot-api-still-ran-out-of-memory-555292277fc6?source=rss-7a4acdec7a4f------2"><img src="https://cdn-images-1.medium.com/max/1600/1*4nbiOFY5Uh2fQYMVhJDFNg.png" width="1600"></a></p><p class="medium-feed-snippet">How an unpaginated Hibernate object graph turned a report preview into a full-report workload inside one HTTP request.</p><p class="medium-feed-link"><a href="https://blog.stackademic.com/postgresql-was-fast-our-spring-boot-api-still-ran-out-of-memory-555292277fc6?source=rss-7a4acdec7a4f------2">Continue reading on Stackademic »</a></p></div>]]></description>
            <link>https://blog.stackademic.com/postgresql-was-fast-our-spring-boot-api-still-ran-out-of-memory-555292277fc6?source=rss-7a4acdec7a4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/555292277fc6</guid>
            <category><![CDATA[postgresql]]></category>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[backend-development]]></category>
            <category><![CDATA[hibernate]]></category>
            <dc:creator><![CDATA[Nithidol Vacharotayan]]></dc:creator>
            <pubDate>Thu, 20 Aug 2026 03:35:44 GMT</pubDate>
            <atom:updated>2026-08-21T06:38:37.292Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Quartz Ran Successfully. The Report Was Still Wrong.]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.stackademic.com/quartz-ran-successfully-the-report-was-still-wrong-5a6b630b2aef?source=rss-7a4acdec7a4f------2"><img src="https://cdn-images-1.medium.com/max/1600/1*uH1_7Gog6xzw9MGMg3mVPQ.png" width="1600"></a></p><p class="medium-feed-snippet">An implicit server timezone shifted both a Spring Boot job and the database window it was supposed to report.</p><p class="medium-feed-link"><a href="https://blog.stackademic.com/quartz-ran-successfully-the-report-was-still-wrong-5a6b630b2aef?source=rss-7a4acdec7a4f------2">Continue reading on Stackademic »</a></p></div>]]></description>
            <link>https://blog.stackademic.com/quartz-ran-successfully-the-report-was-still-wrong-5a6b630b2aef?source=rss-7a4acdec7a4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/5a6b630b2aef</guid>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[quartz-scheduler]]></category>
            <category><![CDATA[backend-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Nithidol Vacharotayan]]></dc:creator>
            <pubDate>Wed, 12 Aug 2026 08:00:55 GMT</pubDate>
            <atom:updated>2026-08-15T17:30:29.007Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Why Our Spring Boot Health Check Lied During an Outage]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://blog.stackademic.com/why-our-spring-boot-health-check-lied-during-an-outage-74d053a51ffa?source=rss-7a4acdec7a4f------2"><img src="https://cdn-images-1.medium.com/max/1600/1*9pdZ0pYThNqpoh7kf_kTCg.png" width="1600"></a></p><p class="medium-feed-snippet">Every pod remained ready while all 200 checkout threads waited on the same dependency.</p><p class="medium-feed-link"><a href="https://blog.stackademic.com/why-our-spring-boot-health-check-lied-during-an-outage-74d053a51ffa?source=rss-7a4acdec7a4f------2">Continue reading on Stackademic »</a></p></div>]]></description>
            <link>https://blog.stackademic.com/why-our-spring-boot-health-check-lied-during-an-outage-74d053a51ffa?source=rss-7a4acdec7a4f------2</link>
            <guid isPermaLink="false">https://medium.com/p/74d053a51ffa</guid>
            <category><![CDATA[backend-engineering]]></category>
            <category><![CDATA[performance]]></category>
            <category><![CDATA[distributed-systems]]></category>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[kubernetes]]></category>
            <dc:creator><![CDATA[Nithidol Vacharotayan]]></dc:creator>
            <pubDate>Wed, 05 Aug 2026 03:25:56 GMT</pubDate>
            <atom:updated>2026-08-07T07:54:25.944Z</atom:updated>
        </item>
    </channel>
</rss>