The blog
An entry is written when a significant component arrives — a new face in the shell, or a piece of backend simulation worth watching work. Not one per feature: a feature that delivers three visible things earns three entries, and a feature that delivers plumbing earns none until the plumbing does something a reader can see.
Entries are terse and take a fixed shape:
- The background — what was there before.
- The requirement — what had to become true.
- The options considered — and why the one chosen won.
- The demo — the running thing, linked or embedded, opened at the view in question.
The fourth part carries the weight the prose used to. Where the significant work is visible, the entry embeds a playable instance of the shell. Where it is headless, the entry embeds a small page that reads the component through the seam and exercises it across its range — possible only because the data crosses in wire shape, which makes such a page an ordinary consumer rather than a special build.
Entries are written for a general technical reader who has not read the requirements document and has no particular reason to care about oceanography. Terms that need it link to the glossary.
drogna is a demonstration harness. Its data is synthetic and its numerics are deliberately fake — see the landing page for what that means and why it matters.
Entries
-
The weights were there, and thrown away — 2026-09-03
Asking which measurement moved a forecast number looked like new science. It was not: the answer had been computed on every cycle and discarded a line later. Keeping it turned out to be the easy half — some of the influence has nowhere to be drawn from.
-
Affordable when you don't need it yet — 2026-09-02
We gave a forecast a price and let the scheduler decide when to pay it. Read the affordability rule the obvious way round and the loop stops running forecasts for good — and the reason it stops is the reason the rule has to be inverted.
-
Ten nodes with nothing to press — 2026-08-31
The Operator tab's controls were correct, and they were at the bottom of a card several screens long. Ten of its twenty-two components had no control at all — and for half of those, the honest fix was not a button.
-
A bound that only held while the grid was coarse — 2026-08-30
The map drew the synthetic ocean as 480 coloured squares, so it was made sixteen times denser. The interesting part was not the cost, which was measurable, but the acceptance check that had been passing on the coarse grid for the wrong reason.
-
A forecast made from the truth is not a forecast — 2026-08-30
Building one browser over everything the system holds turned up a branch with nothing behind it. Filling it needed a forecast, and the only field to hand was the truth — which is the one thing a forecast cannot be made of.
-
A light per message stops meaning anything once there are enough messages — 2026-08-30
Lighting a connection as data crosses it is easy at one message a second and useless at fifty. The fix was not a faster animation: it was letting the light mean a different thing when the clock is running fast, and saying on screen which it means.
-
The expensive part of a tick was not the part doing the science — 2026-08-30
A demo that always opens at minute zero shows an empty console. Winding one forward before the reader arrives turned out to cost twenty-five seconds, for a reason that had nothing to do with the forecast.
-
The most useful button on the screen is the one that can refuse — 2026-08-30
A screen full of controls for a simulated system has an easy failure mode: the controls make the screen change, and nobody finds out whether the system agreed. Building the honest version meant every button gaining the right to say no.
-
A card you can read and a card you can use are different sizes — 2026-08-30
Twenty components have to fit on one screen, so each gets a small box. Then someone asks to turn a dial inside one of those boxes.
-
The check worked, and the drawing still had to go — 2026-08-30
An architecture diagram rots because the system moves and the picture does not. Four passes fixed that with a build check that derived the drawing from the code. The check did its job, caught a real drift, and was the wrong repair anyway.
-
The forecast was not listening, and nothing in the code said so — 2026-08-30
Every part of the loop was individually honest, and the whole was a demonstration of something that was not happening: the instruments changed when the model ran and where the boat went, but never what the model believed. Finding out took asking about a picture.
-
A guided tour is the one part of an honest display allowed to be written in advance — 2026-08-30
Everything else on these screens is forbidden from saying anything it did not observe. A walkthrough is prose somebody typed months ago — so the interesting question was what it is allowed to say.
-
A list of twenty things cannot show you that they are a circle — 2026-08-30
The screen that let you stop any part of the running system was a table, and it was honest about everything except the one thing worth knowing: what else stops when you do.
-
The tabs that are not part of the system — 2026-08-30
A simulator that samples an ocean and forecasts it can show every part of itself working and still never answer "so what". Three yellow tabs answer it — and the thing that proves they are genuinely consuming the forecast is that they refuse to recalculate when a new one arrives.
-
Twenty years and forty-five minutes, on one axis — 2026-08-30
A catalogue of stored datasets was showing a four-dimensional ocean as five columns and twelve characters of a checksum. Drawing the archive filling up instead meant an axis that carries two decades and one afternoon at once.
-
The fastest way to see a system stop is to stop watching the numbers — 2026-08-30
A page listing every message a system passes is complete, honest and almost unreadable. The hard part of drawing the same traffic as marks on lanes was making sure the picture stands still when nothing is happening.
-
A diagram that has dropped its labels looks finished — 2026-08-29
Explaining why a system uses the standards it uses is a slide deck that goes stale. Building the explanation into the running system was the easy part; the hard part was that a broken drawing and a correct one are the same picture until something measures them.
-
A figure that is always zero — 2026-08-29
A dashboard number that never moves is indistinguishable from arithmetic that never works. Measuring how late a measurement is, in a simulated world where nothing is late, turned out to need a test that made something late on purpose.
-
The map you can point at — 2026-08-29
Asking a data service about a place meant typing two numbers for a spot already on the screen. Fixing that turned out to be less about the click than about making sure the thing drawn and the thing fetched cannot be different things.
-
A docking manager is the wrong thing to squeeze into 390 pixels — 2026-08-29
The harness was never unusable on a phone so much as untested on one — but one of its failures was different in kind from the rest. It told a viewer to widen a window that had no width to give.
Coverage
Every Version 2 beat, against the entries that name it. A beat with no entry gets a row
saying so: the gap is the reason the table is published at all, and the table is
counted from the tree — the feature directories under specs/, against the feature
field in each entry's own front matter — so it cannot flatter the record.
The Version 1 entries
Seventeen entries were written during Version 1, one per feature, and they are kept in the archive. Several are about faults found in drogna's own checks rather than in drogna, which is the part that aged best.