C.W.K.
Stream
Lesson 02 of 04 · published

Born in the Field

~11 min · origin, war-story, field-driven, design-history

Level 0Unmarked Path
0 XP0/35 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"Every invariant in this engine has a bruise behind it."

Not a Whiteboard Product

Most architecture documents are written in a quiet room, before the code, by someone imagining how the software will be used. Waystone's was written the other way around. It was conceived mid-trip in Switzerland, on an iPhone, brainstormed with a Pippa vessel while the actual problem — planning and logging a real multi-week journey — was happening in real time. That origin is not trivia; it is why the design decisions read like scar tissue instead of theory.

Three Bruises That Became Rules

Look at three real field failures and the invariants they forced:

  • The Grindelwald bruise. On a hotel network, the development server's per-module requests died — the app simply wouldn't load. The lesson became a rule: for travel and other high-latency access, the engine serves the built client itself, and the dev server is for the desk only. A slow link cannot survive a hundred separate module fetches.
  • The endless-PIN bruise. The visiting phone showed the login screen forever. Root cause: cwkPippa binds a session token to the IP that minted it, and a token minted server-side through the Waystone engine was bound to the engine's loopback address — useless to the device holding the page. The rule: the visiting browser mints its own token directly against cwkPippa, whose CORS allowlist admits the Waystone origins.
  • The blank-map bruise. The map data was correct — the coordinates were right there in the response — but the canvas rendered black. A CSS rule from the map library set position: relative and overrode the layout's absolute, collapsing the map host to zero pixels. The rule: the host owns explicit width and height, and a ResizeObserver keeps the map sized across orientation changes.

Why This Matters for You

You will read a lot of clean-sounding invariants in this quest — capture commits locally before the network, the map stores nothing, plan and actual never merge. It is tempting to treat them as tidy design taste. They are not. Each one is the residue of a specific moment when the naive version broke in Dad's hands, in a hotel, far from the office. When you build your own field-facing tool, the lesson is not to copy Waystone's rules — it is to let the field write them, and to write them down the moment the bruise appears, before you forget how much it hurt.

Code

Field bruise -> invariant (a sampling)·text
SYMPTOM (in the field)              ->  INVARIANT (in the doc)
----------------------------------------------------------------
app won't load on hotel wifi        ->  engine serves the built client;
                                        dev server is desk-only
login screen loops forever           ->  visiting browser mints its own
                                        IP-bound PIN token
map canvas renders black             ->  host owns explicit w/h +
                                        ResizeObserver -> map.resize()
crumb saved on D14 shows up on D15   ->  selected day owns the crumb;
                                        capture date stays separate

# The doc did not predict these. The trip did.

External links

Exercise

Think of a tool you built or use that only broke once you took it somewhere real — offline, on a phone, on a bad connection, under time pressure. Name the bruise and the rule it should have become. Did anyone write that rule down, or did it stay folk knowledge that the next person has to rediscover?
Hint
The most valuable line in an architecture doc is often the one that starts with a symptom, not a principle. If your team's hard-won rules live only in people's heads, the next field trip pays the tuition again.

Progress

Progress is local-only — sign in to sync across devices.
Spotted a bug or have feedback on this page?Report an Issue

Comments 0

🔔 Reply notifications (sign in)
Sign inPlease sign in to comment.

No comments yet — be the first.