<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://tuanh.net/</loc>
  </url>
  <url>
    <loc>https://tuanh.net/series</loc>
  </url>
  <url>
    <loc>https://tuanh.net/tags</loc>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-smaller-transactions-usually-win-over-one-big-save</loc>
    <lastmod>2026-09-15T09:00:24.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-reduce-api-payload-cost-when-compression-helps-bandwidth-but-hurts-cpu</loc>
    <lastmod>2026-09-14T09:00:08.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-prevent-cache-stampede-in-java-applications</loc>
    <lastmod>2026-09-13T09:00:21.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-design-tombstones-retention-and-cleanup-policies-for-event-and-audit-data</loc>
    <lastmod>2026-09-12T09:00:50.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-detect-lock-contention-in-java-without-guessing-from-cpu-graphs-alone</loc>
    <lastmod>2026-09-11T09:00:46.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-soft-deletes-break-query-performance-uniqueness-rules-and-developer-sanity</loc>
    <lastmod>2026-09-10T09:00:33.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-testcontainers-alone-do-not-guarantee-productionlike-database-behavior</loc>
    <lastmod>2026-09-09T09:00:20.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-sticky-sessions-feel-convenient-right-before-horizontal-scaling-hurts</loc>
    <lastmod>2026-09-08T09:00:17.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-design-personalized-feeds-without-letting-heavy-users-dominate-write-load</loc>
    <lastmod>2026-09-07T09:00:45.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-standardize-service-templates-without-freezing-engineering-judgment</loc>
    <lastmod>2026-09-06T09:00:50.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-backend-systems-fail-more-often-at-the-edges-than-at-the-core-logic</loc>
    <lastmod>2026-09-05T09:00:12.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/spring/ways-to-prevent-cache-stampedes-in-spring-boot-without-turning-redis-into-a-bottleneck</loc>
    <lastmod>2026-09-04T09:00:26.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-exactlyonce-delivery-is-usually-a-marketing-phrase-it-depends</loc>
    <lastmod>2026-09-03T09:00:38.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-for-modeling-compensating-actions-that-do-not-corrupt-business-state</loc>
    <lastmod>2026-09-02T09:00:02.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/spring/methods-to-choose-between-servlet-reactive-and-hybrid-approaches-based-on-workload-reality</loc>
    <lastmod>2026-09-01T09:00:33.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-separate-syntactic-validation-from-business-validation-without-duplicate-chaos</loc>
    <lastmod>2026-08-31T09:00:16.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/secrets-for-designing-a-feature-toggle-system-in-java</loc>
    <lastmod>2026-08-30T09:00:44.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-design-stateless-authentication-without-losing-immediate-revocation-control</loc>
    <lastmod>2026-08-29T09:00:23.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-protect-public-apis-from-abuse-without-punishing-legitimate-burst-traffic</loc>
    <lastmod>2026-08-28T09:00:04.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/spring/methods-to-stream-large-downloads-in-spring-boot-without-blowing-up-heap-memory</loc>
    <lastmod>2026-08-27T09:00:15.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-your-audit-log-is-useless-unless-it-captures-intent-outcome-and-actor</loc>
    <lastmod>2026-08-26T09:00:05.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-finegrained-authorization-logic-becomes-a-performance-problem</loc>
    <lastmod>2026-08-25T09:00:08.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/devops/reasons-appendonly-logs-still-need-a-deletion-strategy-for-compliance-and-cost</loc>
    <lastmod>2026-08-24T09:00:45.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-consumerdriven-contracts-fail-when-teams-version-behavior-instead-of-shape</loc>
    <lastmod>2026-08-23T09:00:45.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-soft-deletes-break-unique-constraints-analytics-and-developer-trust</loc>
    <lastmod>2026-08-22T09:00:08.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-for-safe-feature-flags-in-backend-systems-when-old-and-new-logic-must-run-together</loc>
    <lastmod>2026-08-21T09:00:24.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-test-retry-timeout-and-circuit-breaker-logic-without-flaky-sleeps</loc>
    <lastmod>2026-08-20T09:00:09.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/ways-to-detect-memory-fragmentation-issues-in-jvm</loc>
    <lastmod>2026-08-19T09:00:33.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-keep-search-indexes-consistent-with-primary-databases-without-painful-full-rebuilds</loc>
    <lastmod>2026-08-18T09:00:08.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-detect-event-ordering-bugs-before-customers-do</loc>
    <lastmod>2026-08-17T09:00:06.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-how-can-you-design-relevance-tuning-workflows-that-developers-and-product-teams-can-actually-manage</loc>
    <lastmod>2026-08-16T09:00:30.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-design-redaction-rules-that-prevent-accidental-bypass</loc>
    <lastmod>2026-08-15T09:00:45.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-your-api-gateway-becomes-the-most-fragile-part-of-the-architecture</loc>
    <lastmod>2026-08-14T09:00:08.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-expose-progress-for-longrunning-jobs-without-polling-your-database-to-death</loc>
    <lastmod>2026-08-13T09:00:41.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-synchronous-microservice-chains-fail-harder-than-they-look</loc>
    <lastmod>2026-08-12T09:00:14.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/tips-design-fallback-responses-without-creating-data-integrity-bugs</loc>
    <lastmod>2026-08-11T09:00:42.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/spring/reasons-your-hikaricp-pool-is-the-real-bottleneck-in-a-fast-spring-boot-api</loc>
    <lastmod>2026-08-10T09:00:18.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/devops/reasons-shared-database-multitenancy-becomes-a-performance-and-security-trap</loc>
    <lastmod>2026-08-09T09:00:45.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-for-graceful-shutdown-that-protect-inflight-requests-consumers-and-jobs</loc>
    <lastmod>2026-08-08T09:00:28.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-how-to-implement-circuit-breaker-pattern-without-frameworks</loc>
    <lastmod>2026-08-07T09:00:40.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-for-multistep-authorization-when-business-rules-depend-on-resource-state</loc>
    <lastmod>2026-08-06T09:00:46.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/tips-design-audit-logging-that-is-useful-in-production-instead-of-just-expensive</loc>
    <lastmod>2026-08-05T09:00:15.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-protect-databases-from-hot-keys-viral-content-and-uneven-traffic-patterns</loc>
    <lastmod>2026-08-04T09:00:34.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-your-idempotency-key-design-still-creates-duplicate-orders-in-microservices</loc>
    <lastmod>2026-08-03T09:00:09.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-diagnose-sudden-native-memory-growth-in-java-services</loc>
    <lastmod>2026-08-02T09:00:35.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-roll-out-breaking-database-changes-without-a-freeze-window</loc>
    <lastmod>2026-08-01T09:00:17.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-json-serialization-dominates-response-time-more-than-business-logic</loc>
    <lastmod>2026-07-31T09:00:32.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-keep-async-executors-from-becoming-an-unmonitored-second-production-system</loc>
    <lastmod>2026-07-30T09:00:31.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-use-local-caches-in-java-services-without-serving-stale-data-forever</loc>
    <lastmod>2026-07-29T09:00:08.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/spring/techniques-to-propagate-user-identity-safely-across-internal-service-calls</loc>
    <lastmod>2026-07-28T09:00:14.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-localhost-benchmarks-make-distributed-systems-look-smarter-than-they-are</loc>
    <lastmod>2026-07-27T09:00:50.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-build-fallback-search-logic-that-returns-relevant-results-faster</loc>
    <lastmod>2026-07-26T09:00:47.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-shared-database-migrations-across-teams-create-coordination-bottlenecks</loc>
    <lastmod>2026-07-25T09:00:32.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-reflectionbased-framework-magic-is-expensive-in-very-large-applications</loc>
    <lastmod>2026-07-24T09:00:13.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-handle-outoforder-events-when-business-rules-depend-on-sequence</loc>
    <lastmod>2026-07-23T09:00:07.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-run-oneoff-repair-jobs-safely-on-live-data-without-repeating-old-incidents</loc>
    <lastmod>2026-07-22T09:00:22.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-sorting-by-score-date-and-business-turns-search-into-a-stability-problem</loc>
    <lastmod>2026-07-21T09:00:31.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-validate-large-uploads-securely-without-reading-them-twice</loc>
    <lastmod>2026-07-20T09:00:17.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/devops/reasons-increasing-kafka-partitions-is-easy-on-paper-but-messy-in-production</loc>
    <lastmod>2026-07-19T09:00:09.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/spring/techniques-how-do-you-prevent-internal-starter-libraries-from-becoming-surprise-magic</loc>
    <lastmod>2026-07-18T09:00:27.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-debug-crossservice-failures-without-drowning-in-noise</loc>
    <lastmod>2026-07-17T09:00:07.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/ways-to-handle-partial-failure-without-lying-to-the-user-about-success</loc>
    <lastmod>2026-07-16T09:00:37.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-csv-import-features-become-concurrency-bugs-in-disguise</loc>
    <lastmod>2026-07-15T09:00:42.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-for-building-compensation-logic-that-is-actually-reversible-in-business-workflows</loc>
    <lastmod>2026-07-14T09:00:26.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/ways-to-analyze-thread-dumps-to-find-performance-bottlenecks</loc>
    <lastmod>2026-07-13T09:00:22.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/ways-to-partition-tenant-data-for-scale-without-painting-yourself-into-a-migration-corner</loc>
    <lastmod>2026-07-12T09:00:41.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-prevent-the-thundering-herd-problem-in-backend-systems</loc>
    <lastmod>2026-07-11T09:00:20.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-handle-hot-partitions-in-kafka-before-one-key-becomes-the-office-dictator</loc>
    <lastmod>2026-07-10T09:00:10.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-read-replicas-return-correct-data-too-late-for-your-business-logic</loc>
    <lastmod>2026-07-09T09:00:02.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/devops/techniques-to-stop-cache-warmup-jobs-from-becoming-a-ddos-against-your-database</loc>
    <lastmod>2026-07-08T09:00:49.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-propagate-trace-context-correctly-across-async-boundaries-in-java</loc>
    <lastmod>2026-07-07T09:00:25.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/devops/techniques-to-handle-burst-traffic-without-crashing-systems</loc>
    <lastmod>2026-07-06T09:00:37.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-stop-log-io-from-becoming-the-slowest-part-of-your-fast-api</loc>
    <lastmod>2026-07-05T09:00:22.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-design-retryable-command-handlers-that-do-not-produce-side-effects-twice</loc>
    <lastmod>2026-07-04T09:00:29.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/ways-to-separate-business-metrics-from-technical-metrics-so-dashboards-stop-lying</loc>
    <lastmod>2026-07-03T09:00:50.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-json-parsing-dominates-cpu-in-apis-that-barely-touch-the-database</loc>
    <lastmod>2026-07-02T09:00:36.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-platform-teams-and-product-teams-should-fight-through-build-pipelines-not-only-meetings</loc>
    <lastmod>2026-07-01T09:00:11.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-model-money-correctly-in-java-without-floatingpoint-landmines</loc>
    <lastmod>2026-06-30T09:00:24.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-build-safe-distributed-caches-when-cache-invalidation-is-not-the-only-monster</loc>
    <lastmod>2026-06-29T09:00:40.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/devops/techniques-for-safe-data-backfills-in-live-systems-without-locking-tables-for-hours</loc>
    <lastmod>2026-06-28T09:00:34.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-measure-true-tail-latency-instead-of-celebrating-misleading-averages</loc>
    <lastmod>2026-06-27T09:00:02.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-eliminate-crossservice-n1-calls-before-they-melt-production</loc>
    <lastmod>2026-06-26T09:00:03.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/methods-to-build-safer-webhook-consumers-when-providers-retry-forever</loc>
    <lastmod>2026-06-25T09:00:06.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-monotonic-time-matters-more-than-you-think-in-retries-timeouts-and-metrics</loc>
    <lastmod>2026-06-24T09:00:48.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-for-building-a-durable-retry-queue-instead-of-sleeping-threads-and-crossed-fingers</loc>
    <lastmod>2026-06-23T09:00:36.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-stop-connection-pool-starvation-when-slow-sql-and-burst-traffic-collide</loc>
    <lastmod>2026-06-22T09:00:22.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-default-thread-pool-settings-are-dangerous-in-production</loc>
    <lastmod>2026-06-21T09:00:45.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-for-returning-partial-success-in-bulk-apis-without-hiding-important-failures</loc>
    <lastmod>2026-06-20T09:00:41.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-your-saga-design-looks-elegant-on-the-whiteboard-but-explodes-in-edge-cases</loc>
    <lastmod>2026-06-19T09:00:06.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-for-safe-file-processing-in-java-when-scanning-parsing-and-storage-have-different-speeds</loc>
    <lastmod>2026-06-18T09:00:19.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-make-structured-logs-searchable-without-drowning-in-cardinality</loc>
    <lastmod>2026-06-17T09:00:17.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-reproduce-race-conditions-deterministically-in-java</loc>
    <lastmod>2026-06-16T09:00:19.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-serialization-becomes-a-performance-bottleneck-in-java</loc>
    <lastmod>2026-06-15T09:00:28.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-handle-eventual-consistency-in-ux-without-confusing-users</loc>
    <lastmod>2026-06-14T09:00:27.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/spring/techniques-verify-transaction-boundaries-in-spring-without-trusting-annotations</loc>
    <lastmod>2026-06-13T09:00:06.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/ways-to-build-a-consistent-api-response-strategy-across-services</loc>
    <lastmod>2026-06-12T09:00:13.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/reasons-container-cpu-limits-can-distort-jvm-behavior-and-benchmark-results</loc>
    <lastmod>2026-06-11T09:00:18.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/spring/techniques-to-simulate-downstream-slowness-in-spring-boot-before-it-happens-for-real</loc>
    <lastmod>2026-06-10T09:00:48.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-choosing-between-batch-inserts-jdbc-batching-and-bulk-load-tools--practical-decision-criteria</loc>
    <lastmod>2026-06-09T09:00:17.000Z</lastmod>
  </url>
  <url>
    <loc>https://tuanh.net/blog/java/techniques-to-version-internal-apis-without-freezing-delivery-speed</loc>
    <lastmod>2026-06-08T09:00:18.000Z</lastmod>
  </url>
</urlset>