Latest posts

Psychological Safety Is the Manager's Job

A reorganisation is never a clean exercise in moving boxes. It’s a series of quiet transfers of accountability, and the consequences land on people, not charts. I learned that last year in a way I’d rather have learned second-hand. · Read more...

Vermail: CJK Search with Character Bigrams

Full-text search assumes words. Chinese, Japanese and Thai don’t separate them. The default SQLite tokeniser, unicode61, splits on word boundaries, and a run of unspaced Chinese has none. A Chinese message tokenises into one enormous term, and recall collapses to... · Read more...

Working Without a Reliable Internet

A few years ago I wrote about the “No Network” rule: a build that requires a steady connection is a broken build, because where I live the connection is never guaranteed. I framed it as a preference back then. It’s... · Read more...

Vermail: the Sync Engine

The first decision in Vermail was that the local store is a rebuildable projection of the server, not a second source of truth. Once that’s settled, sync is just a question of asking the server for changes as cheaply as... · Read more...

Ember字: Slimming the Decks

Decks had accumulated weight: grammar points carried notes as well as cards, and some curated entries no longer pulled their weight. · Read more...

Impersonated: When a Scam Wears Your Name

In November 2025 an app appeared on a Chinese Android app store bearing my employer’s name. It invited people to invest in energy-related projects and promised elevated returns. · Read more...

Ember字: the Startup Snapshot

A cold launch took 7.6 seconds: sources, dictionary, projection, then first paint. The fix was meant to be a content snapshot written on first launch and read on the next, which should have cut that to about a second and... · Read more...