2026
- When to adopt the heavy machinery: thresholds, not opinions
"Adopt it when a measurement demands it" is useless until you name the measurement, the threshold, and the device you measured on. Here are …
10 min read
→
- A reference design: quotes and watchlist MVP in Flutter
A concrete, buildable architecture for a small team — what to build, in what order, what to deliberately not build, and the measured trigger …
5 min read
→
- Channels, Pigeon, and FFI: crossing to native without paying per tick
Flutter offers three ways to reach native code, with different costs and different failure modes. Picking correctly is mostly about one …
6 min read
→
- Charts in Flutter: custom painting that holds 60fps
A candlestick chart is the one screen where the widget tree is the wrong tool. Building it well comes down to three moves: paint instead of …
6 min read
→
- Flutter project structure: packages, boundaries, and add-to-app
How to lay out a Flutter codebase so boundaries are enforced rather than suggested — a package per feature, a dependency rule a tool can …
6 min read
→
- Flutter under a firehose: making rebuild scope match change scope
A quote list that updates hundreds of times a second will destroy a Flutter app built the ordinary way. The fix isn't a faster state …
6 min read
→
- Local-first data: snapshots, deltas, and the two kinds of state
Most sync problems get hard because two kinds of data with opposite properties are pushed through one mechanism. Separate the slow-changing …
6 min read
→
- Modularity and migration: cutting boundaries that survive
Module boundaries end up mirroring your org chart whether you plan them or not. The useful criterion isn't layers or file types — it's …
6 min read
→
- Order reliability: idempotency, unknown states, and reconciliation
Exactly-once delivery does not exist. For an irreversible action like an order, that impossibility forces a specific design: a key minted …
6 min read
→
- Real-time data pipelines: push, backpressure, and conflation
A price feed is not a fast API. It is an unbounded stream whose consumer is slower than its producer, which makes backpressure the central …
7 min read
→
- Shipping a database with your Flutter app: offline catalogs and instant search
How to put a large read-only catalog on the device and search it instantly: bundling a prebuilt SQLite file as an asset, keeping data …
5 min read
→
- The client security model: an input, never an authority
Every control you ship to a device you don't own can be removed. That single fact settles most mobile security questions: client checks buy …
7 min read
→
- The cross-platform boundary: share what must not diverge
"Which cross-platform framework" is the wrong first question. The right one is which layers must be identical on both platforms — because …
6 min read
→
- Trading app architecture: six constraints and what they force
A trading client's architecture is mostly settled before you choose a stack — by data rate, irreversibility, catalog size, platform count, …
6 min read
→