Christopher Renshaw Notes

Field notes

Notes from shipping mobile apps that talk to hardware.

Practical write-ups on Android BLE, GATT, Core Bluetooth, firmware OTA, embedded Android, and the things that go wrong when phones meet real-world hardware. Written from production experience — Level2 (Dexcom CGM), Octane Fitness Smart Console, Carnival shipboard apps.

  1. Offline-first mobile sync — the pattern that survived ship Wi-Fi

    Most mobile apps are network-first. Offline-first inverts the relationship: local DB is truth, network is a sink. Five rules — local IDs, soft state, conflict resolution, idempotent endpoints, bounded queues — and the architecture I shipped at Carnival to keep boarding moving when ship Wi-Fi disappeared.

    Read the post →
  2. Real-time trading on Android: lessons from Schwab Mobile

    A trade ticket looks simple — a symbol, a quantity, a Submit button. Everything that makes it actually work — quote streaming, order state machines, latency budgets, biometric auth, idempotency keys — happens behind that surface. The shape of what we shipped on Schwab Mobile (1.8M+ Android installs).

    Read the post →
  3. Surviving GATT_ERROR 133 on Android BLE

    The most infamous error code in the Android Bluetooth stack means almost nothing on its own — but it eats production apps alive. Here's the actual cause, the retry pattern that kept the Octane Smart Console fleet stable across commercial gyms worldwide, and the ConnectionGate state machine that finally made the symptom go away.

    Read the post →
  4. Streaming Dexcom G6 to Android: backfill, auth, and the 5-minute cadence

    Dexcom G6 doesn't just push glucose readings — it expects an authenticated session, hands you 3 hours of historical EGV records on connect, and then drops one notification every 5 minutes. Here's the integration shape we used at Level2 to ship clinical-grade data with zero loss.

    Read the post →
  5. Embedded Android: shipping a 10-inch console used in $500M of equipment

    What changes when an Android app stops being a phone app and becomes the operating system on a fitness machine? At Octane, we migrated the Smart Console from an Angular hybrid to fully native Android (Kotlin + NDK). These are the architectural decisions that survived production.

    Read the post →