Tombstone
world-bootstrap
Dec 2014 โ Jan 2016 ยท age 32โ34
What it was
A 2D CAD program on an infinite canvas, meant for game levels, gardens, room layouts, diagrams and photo collages, written in Java 8 and JavaFX. Every thing in a document, whether circle, polygon, path, image, connector or turtle, was a bag of parts such as position, rotation, colour, layer and point set, and the document iterated behaviours rather than types. A precedence solver decided what a mouse-down meant across every thing at once. Undo history was stored as field diffs that branched when you edited after an undo, and the whole tree was saved inside the document. Dragging back-buffered the unselected world. Scripts reached the model through a small query language. It came in two sprints a year apart, and its final commit read "boom, a turtle is alive", above a README that said everything was broken.
Wins, for the age
- At thirty-three, Jeff saved undo history, abandoned branches and all, into the document file, five years before Figma's branching (2021) put versioned design in front of everyone.
- Brought the entity-component pattern into an editor, finding on their own what Unity's component model had found in 2005, and pushed part after part to full test coverage.
- Replaced a hated if-chain with a rule-precedence solver for input contention, after the ape simply committed "progress, but man... this is hard."
- Back-buffered the unselected world during a drag, so moving one polygon among a thousand stopped redrawing the thousand.
What it taught
- Component systems make parts easy to test and clicks hard to resolve; explicit precedence is the fix.
- Once history is data rather than closures, persisting it is cheap, and reopening a document becomes resuming instead of restarting.
- A cache key must include everything the cache depends on. The back buffer keyed on an identity hash that never changed.
- Coverage of parts is not coverage of the integration. The history tests were empty shells, and a stale selection flag disabled Copy, Cut and Delete forever.
Genealogy
Ancestors: Pixel Master: an editing model kept apart from its platform, with undo as data. Zer: the JavaFX shell for tools that push things around in 2D. Z Terrain Editor: the long habit of building editors for worlds. Z Time Alloc: draggable handles and snap-to-grid, first learned in 2001. Descendants: Goat: things on a canvas, now in service of board games on every screen. Adama Core: documents where every change is a reversible delta.
Epitaph
Here lies world-bootstrap. It remembered every undo, even the branches you walked away from, and drew its first turtle line the night it stopped.