Blog

Practical lessons from 12+ years of building and shipping mobile apps.

Keeping a Long-Lived gRPC Stream Alive on Flutter

Flutter

Opening the realtime stream was the easy part; keeping the socket alive on a phone that suspends, switches networks, and lies about being connected was the hard part.

Jul 5, 202611 min read

Offline-First Messaging: Reconciling Local SQLite With the Server

Flutter

Building offline-first chat meant our on-device SQLite store and the server had to agree on reality after a reconnect, and the first version got that agreement spectacularly wrong.

May 24, 202610 min read

Push Notifications on Flutter: Killing Duplicate Alerts Across iOS and Android

Flutter

A single Sync message once fired three alerts on one phone; here is how I hunted down duplicate, late, and missing push notifications on the device.

Jan 18, 20269 min read

Taming Flutter Rebuilds in a Data-Heavy Patient Dashboard

Flutter

The doctor dashboard felt janky and killed the tablet battery by lunch; the culprit was thousands of needless widget rebuilds hiding behind a live data stream.

Nov 8, 20258 min read

Background Photo Uploads That Survive the App Being Killed

Flutter

Patient symptom photos kept vanishing when the app was backgrounded or killed, so we handed the uploads to the OS itself.

Aug 16, 202510 min read

Building a Resilient Offline Layer for Flaky Networks in Vietnam

Flutter

Our patients live on flaky 3G in elevators and rural clinics, so we stopped assuming the network works and built an app that survives it losing.

Sep 10, 202410 min read

iOS Developer Switching to Flutter: What I Wish I Knew Sooner

Flutter

After 6 years of native iOS development, I switched to Flutter. Here are the most surprising things.

Mar 10, 202412 min read