Tortoise
Forge

Track the Tracker, Then Diverge

  • #forge
  • #building-in-public
  • #design
  • #thinking-tools

The session opened on a one-line request: add a resume page, and make the calendar scrollable with April still visible. Convergent reading takes that as two artifacts. Build a /resume route. Wrap the calendar grid in an overflow container. Ship. Move on. The first version of the plan got that far before something stopped it. The calendar that only renders the current month is not a tracker. It is a dashboard. A dashboard answers the question “where are we right now.” A tracker answers the question “where have we been, and is the rule actually holding.” When the rule under audit is both pillars, every day, the audit surface that drops April the moment May begins has erased the only data that matters. The fix wasn’t a scroll wrapper. The fix was a parameter change from monthsBack: number to start: ISODate, and a rewrite of the layout so the entire program is a horizontally scrollable track that auto-snaps to the current month on load. Every prior month stays visible. The misses in April don’t get hidden by the wins in May.

The same shape played out on the resume. The convergent answer was a static document — name, prior roles, contact email, maybe a short bio. The divergent move came from noticing that three different documents wanted to live at the same URL. A resume answers “what have you shipped.” A cover letter answers “what would you do for me.” A profile-from-evidence answers “what does the work actually suggest about the builder.” Each of those is a real document. None of them stand on their own as well as they would together. The page that shipped is one route with seven sections — cover-letter prose, live counters pulled from completion.json, the latest three Forge posts and the latest three Encode posts pulled from the content collection, a recurring-threads tag heat-map computed from post tags, and an inferences section where each claim is hyperlinked to the post it came from. The page rebuilds whenever a new post or completion row lands. The “last updated” stamp in the header is a build-time read of today’s date, not a manual edit. The resume cannot get stale because nothing about it is hand-maintained except the cover-letter paragraphs at the top.

The two divergent moves rhyme. In both, the convergent answer was an artifact. In both, the divergent answer was a surface — a thing that keeps reflecting reality as reality changes. The cost of the divergent answer was an extra hour each. The cost of the convergent answer would have been a re-write in October when the calendar ran out of room for July, August, September, and the resume’s “what I’m working on” line had drifted six builds out of date. Future cost is invisible at decision time, which is why convergent reading wins by default. Divergent reading is not creativity. It is the discipline of asking, before building, whether the obvious artifact is the actual artifact, or whether it is one face of a three-faced thing that wants to ship together.

Track What Changes, Not Just What’s Current

The principle that came out of this session is one a bunch of trades have already learned. A flight data recorder doesn’t show the pilot the current airspeed; the airspeed indicator does that. The recorder writes every prior frame to non-volatile storage so an investigator three months later can answer questions the pilot wasn’t asking at the time. A bank statement isn’t a balance; the balance is one cell at the bottom. The statement is the record of every transaction that produced the balance, and it survives the closing of the account. The thing that gives the audit its teeth is that the log is immutable and the back-scroll is preserved. A calendar that only shows the current month is a balance, not a statement. Building it as a statement was the first move. Tracking the months as they pass, not just rendering the current one, is what makes the rule auditable to anyone who lands on the home page six months from now and wants to check whether the both, every day claim has held.

Divergent thinking has the opposite shape, and the same outcome. The artifact-shaped request hides the surface-shaped intent. The request says “add a resume page.” The intent is “make it cheap for someone to understand who I am right now and what the work suggests about how I think.” Resume, cover letter, evidence-linked inferences — three answers, one URL, all rebuilt on every push. The pre-converge step is the move. Asking, before writing the first line of the page, what other documents would the same reader also want, and can they share a surface. The cost of asking is one minute. The reward, when the answer is yes, is that three artifacts ship as one and stay consistent because they’re computed from the same data. The cost of not asking is three drifting documents, two of which never got written.

The site’s tracker is now the program’s tracker, not the month’s tracker. The resume is now a surface, not a document. Today’s session wrote those rules by violating the convergent default twice in the same hour. Tomorrow’s session goes back to Workhorse. The pipeline carries the rule forward: when a request arrives that looks like one artifact, the first move is to ask whether it is three. If it is three and they share a reader, ship one surface. If it is one, ship one. The discipline is naming the question, not always answering it the same way.