The engineering notebook
RSS feedGood software.
Lessons from building it.
Deep dives into Flutter and Dart, with notes from across the stack. Architecture, backend systems, cloud, and AI - from the work behind the code.
By Ashish Bhakhand 108 published articles
All articles
108 articles
Idempotent Mobile Health Backfills Across Reinstalls and Devices
Use semantic identities and natural keys so repeated health imports repair missing history without inflating aggregates.
From Activity to Streak to Milestone: Building Derived Projections
Turn immutable activity facts into rebuildable streaks, milestones, and user views without making the write path fragile.
Building Workout Live Activities and Dynamic Island UI
Map durable workout state into ActivityKit, support interactions, and reconcile duplicate or stale activities.
Testing Flutter BLoCs Beyond the Happy Path
Test overlapping requests, retries, pagination, streams, timers, cancellation, and disposal with bloc_test, mocktail, and fake_async.
Testing Coroutine ViewModels with Controlled Dispatchers
Drive intents, virtual time, flows, cancellation, and repository outcomes deterministically.
Database Migrations Are Executable Architecture
Treat schema changes, constraints, backfills, compatibility, and cutovers as reviewed application design rather than deployment chores.
Building a Notification Platform Instead of Sending Push Messages Everywhere
Centralize notification policy, preferences, scheduling, delivery, and idempotency behind one backend capability.
Interactive Widgets with App Intents
Perform a small background action, refresh authoritative data, and republish the widget without opening the app.
Push Notifications Have More Than One Delivery Path
Build a Flutter notification pipeline for foreground, background, terminated, token-refresh, local scheduling, and navigation behavior.