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 since become a hard requirement.

The tools that paper over the gap between China and Western services, the VPNs, keep getting harder to use. Servers vanish, protocols get throttled, and the thing that worked last month quietly stops working this month.

I won’t pretend this is anything other than what it is: friction, imposed from outside, on anyone doing ordinary remote work. But there’s a difference between a constraint you can change and one you can only design around. This one is the second kind.

What it forces:

  • Network-independent builds. Every dependency resolvable offline, every test suite runnable on a plane.
  • Local-first tooling. The things I rely on daily are the things that work without a hop to a Western service.
  • Commit, then sync. Write locally, commit locally, and treat the remote sync as a background task rather than a precondition for work.

None of this was meant to be good engineering, it just turns out that way. A build that works offline in a Beijing coffee shop works the same in a clean CI container. A project that doesn’t depend on a particular VPN staying up is easier for everyone else to build.

I’d rather not have the constraint. But it’s there, so I build around it, and the result is more portable software.