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
Building Event-Driven Features Without Losing Consistency
Use ownership, durable events, idempotent consumers, and rebuildable projections to keep asynchronous features understandable.
Health Connect Synchronization Beyond Permission Requests
Handle availability, per-type permissions, incremental reads, source identity, and normalized daily data.
Why I Use RxDart Selectively Instead of Making Everything Reactive
Use RxDart where Flutter stream timing matters: debounced search, noisy connectivity, combined sources, and latest-value behavior.
SwiftData in an Offline-First Application
Use local persistence as a responsive product capability with explicit freshness, sync, and conflict rules.
Direct SQL with asyncpg: Why I Do Not Add an ORM Automatically
Direct PostgreSQL access can make queries, constraints, and atomic behavior clearer when the team is willing to own the SQL.
Multi-Tenant Authorization Requires More Than Checking a JWT
Authentication proves identity. Safe multi-tenant APIs must also scope every resource query and action to the caller's organization.
Optimistic Chat UI with Idempotent Server Turns
Show messages immediately while reconciling acknowledgements, streamed text, persistence, failures, and safe retries.
When Manual Dependency Injection Stopped Scaling in My Flutter Apps
How get_it and injectable help organize services, repositories, use cases, and BLoCs without hiding ownership or lifecycle decisions.
Offline-First Android Data with Room and Supabase
Render from local truth, synchronize explicitly, and model freshness and conflicts instead of hiding them.