<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>KHD Labs Field Notes</title>
    <link>https://khdlabs.com/blog</link>
    <description>Performance autopsies, mobile runtime internals, and architecture notes from KHD Labs.</description>
    <language>en-us</language>
    
    <item>
      <title><![CDATA[The 16ms Frame Budget: Why Your Cross-Platform App Stutters (and How We Profile It in Instruments)]]></title>
      <link>https://khdlabs.com/blog/16ms-frame-budget-profiling</link>
      <description><![CDATA[A deep dive into why React Native and Flutter apps drop frames during fast scroll, how Hermes garbage collection pauses murder 120Hz ProMotion, and our step-by-step triage using Xcode Instruments.]]></description>
      <pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate>
      <guid>https://khdlabs.com/blog/16ms-frame-budget-profiling</guid>
    </item>
  
    <item>
      <title><![CDATA[Offline Sync Is Never 'Just SQLite': Battle Scars from Multi-Device Conflict Resolution]]></title>
      <link>https://khdlabs.com/blog/offline-sync-is-never-just-sqlite</link>
      <description><![CDATA[Why slapping WatermelonDB or raw SQLite on an app doesn't solve offline sync. How edge-case race conditions wipe out customer data, and how we architect idempotent delta streams.]]></description>
      <pubDate>Sat, 28 Mar 2026 00:00:00 GMT</pubDate>
      <guid>https://khdlabs.com/blog/offline-sync-is-never-just-sqlite</guid>
    </item>
  
    <item>
      <title><![CDATA[The $14,000 Cloud Bill That Should Have Been a Single Box: Unwinding Premature Microservices for Mobile Backends]]></title>
      <link>https://khdlabs.com/blog/14000-dollar-cloud-bill-single-box</link>
      <description><![CDATA[How a 6,000-user mobile product ended up running 14 Kubernetes microservices, paying AWS astronomical NAT gateway bills, and how we collapsed it into a $120/mo monolith that cut latency by 80%.]]></description>
      <pubDate>Sat, 14 Mar 2026 00:00:00 GMT</pubDate>
      <guid>https://khdlabs.com/blog/14000-dollar-cloud-bill-single-box</guid>
    </item>
  
    <item>
      <title><![CDATA[Why 4MB JS Bundles Kill Mobile Web Conversion: Real-World Bundle Dieting]]></title>
      <link>https://khdlabs.com/blog/4mb-bundle-kills-mobile-web-conversion</link>
      <description><![CDATA[Most mobile web visitors bounce before your React bundle hydrates. Here is how we diagnose bloated chunks, kill accidental barrel-file imports, and cut TTI from 6.8s to 900ms on 4G.]]></description>
      <pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
      <guid>https://khdlabs.com/blog/4mb-bundle-kills-mobile-web-conversion</guid>
    </item>
  
    <item>
      <title><![CDATA[Stop Using Redux or Zustand as a Second Database: Local Cache vs Remote State]]></title>
      <link>https://khdlabs.com/blog/stop-using-redux-as-second-database</link>
      <description><![CDATA[Why frontend teams waste months building normalized client-side stores, how JSON serialization bloat exhausts mobile memory, and what to use instead.]]></description>
      <pubDate>Tue, 10 Feb 2026 00:00:00 GMT</pubDate>
      <guid>https://khdlabs.com/blog/stop-using-redux-as-second-database</guid>
    </item>
  
    <item>
      <title><![CDATA[Memory Jetsam on iOS: Why Your App Silently Dies in the Background on Older iPhones]]></title>
      <link>https://khdlabs.com/blog/memory-jetsam-ios-silent-kills</link>
      <description><![CDATA[Why Sentry and Crashlytics show zero stack traces when iOS kills your app, how dirty memory pages trigger kernel Jetsam eviction, and how to measure real memory footprint.]]></description>
      <pubDate>Thu, 29 Jan 2026 00:00:00 GMT</pubDate>
      <guid>https://khdlabs.com/blog/memory-jetsam-ios-silent-kills</guid>
    </item>
  
    <item>
      <title><![CDATA[WebSockets vs Server-Sent Events for Mobile: A Real Battery & Reconnect Teardown]]></title>
      <link>https://khdlabs.com/blog/websockets-vs-sse-mobile-battery</link>
      <description><![CDATA[Why keeping a bidirectional WebSocket open drains phone batteries through cellular radio tail states, and why Server-Sent Events over HTTP/2 are superior for 90% of mobile feeds.]]></description>
      <pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate>
      <guid>https://khdlabs.com/blog/websockets-vs-sse-mobile-battery</guid>
    </item>
  
    <item>
      <title><![CDATA[Image Pipelines That Don't Choke: Native Downsampling and List Recycling]]></title>
      <link>https://khdlabs.com/blog/image-pipelines-listview-downsampling</link>
      <description><![CDATA[Why loading 4K images into 60px thumbnails murders mobile scroll performance, how decoded bitmap buffers blow up RAM, and how we implement zero-alloc image downsampling.]]></description>
      <pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate>
      <guid>https://khdlabs.com/blog/image-pipelines-listview-downsampling</guid>
    </item>
  
    <item>
      <title><![CDATA[The False Economy of 'Write Once, Run Anywhere': When Native Swift and Kotlin Are Actually Cheaper]]></title>
      <link>https://khdlabs.com/blog/false-economy-write-once-run-anywhere</link>
      <description><![CDATA[Most agencies sell cross-platform to protect their own staffing margins. Here are the 4 specific architectural constraints where React Native or Flutter will cost you twice as much as dual native.]]></description>
      <pubDate>Sun, 30 Nov 2025 00:00:00 GMT</pubDate>
      <guid>https://khdlabs.com/blog/false-economy-write-once-run-anywhere</guid>
    </item>
  
    <item>
      <title><![CDATA[Postgres Row-Level Security for Mobile Clients: High Velocity or Latency Bottleneck?]]></title>
      <link>https://khdlabs.com/blog/postgres-rls-mobile-clients-bottleneck</link>
      <description><![CDATA[Direct client-to-database architectures promise instant mobile APIs. Here is why unindexed RLS policies silently destroy Postgres query throughput and how we tune them.]]></description>
      <pubDate>Wed, 12 Nov 2025 00:00:00 GMT</pubDate>
      <guid>https://khdlabs.com/blog/postgres-rls-mobile-clients-bottleneck</guid>
    </item>
  
    <item>
      <title><![CDATA[Fixing the 3-Second Cold Start: Hermes Bytecode, Module Tracing, and Deferred Imports]]></title>
      <link>https://khdlabs.com/blog/fixing-3-second-cold-start-hermes</link>
      <description><![CDATA[Why users stare at your splash screen for three seconds, how top-level module evaluation clogs main thread startup, and our playbook for sub-second mobile cold starts.]]></description>
      <pubDate>Fri, 24 Oct 2025 00:00:00 GMT</pubDate>
      <guid>https://khdlabs.com/blog/fixing-3-second-cold-start-hermes</guid>
    </item>
  
    <item>
      <title><![CDATA[App Store Review Russian Roulette: 5 Real Rejections and the Architectural Defenses We Build]]></title>
      <link>https://khdlabs.com/blog/app-store-review-russian-roulette</link>
      <description><![CDATA[From Guideline 3.1.1 IAP ambushes to Guideline 5.1.1 account deletion requirements, here are the real architectural tripwires that delay product launches and how we build around them.]]></description>
      <pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate>
      <guid>https://khdlabs.com/blog/app-store-review-russian-roulette</guid>
    </item>
  
  </channel>
</rss>