The feature we built during the meeting


Halfway through a presentation to a room of executives, I stopped showing slides and typed one sentence into my software factory instead:

“We’re going to add household glance statistics in a dashboard in Domi, in the web application, with some of the assets and all the information.”

That was the entire specification. I went back to talking. Forty-two minutes later the feature was live on staging, and I had not opened an editor.

The clock

1:19:02 p.m. The sentence lands in the queue. Within 25 seconds it is five tasks: product owns the metrics, design the look, web the build, security the audit, marketing this post. Each one carries my sentence word for word.

1:19:29. Design claims its task. Twenty-seven seconds from idea to a specialist working on it.

1:21. Product’s draft metric set is already in web’s and design’s inboxes — and one decision is missing from it on purpose. More on that below.

1:28. Pull request open.

1:56. Merged, after two fixes.

2:00:51. Live on staging.

What shipped

The Briefing page in Domi: a row of glance tiles reading 2 Home, 2 Vehicle, 1 Appliance, 1 Pool, 16 documents, 21 tasks, 15 predicted by Domi, 0 this week, 7 obligations

That is my actual household, on the real dashboard. Two homes, two vehicles, an appliance and a pool under management. Sixteen documents read and filed. Twenty-one open tasks, fifteen of which Domi wrote by itself from what it found in the paperwork. Nothing due this week. Seven standing obligations.

Every count is scoped to what the person looking is allowed to see. A household can keep things in private groups, and a total is a sneaky way to leak a row you can’t open — “7 obligations” tells you something even if you can’t see the seventh. So the scoping went in with the first line of the query, and security was assigned to check it in the same minute the builders started. On a screen full of my own family’s data, in front of an outside audience, that is the feature that makes the feature safe.

The reviewer earned its keep twice

An adversarial reviewer — a different model family from the one that writes, on purpose — reads every pull request here. In those 42 minutes it caught two real bugs.

The “this week” count was missing recurring events. Domi stores a repeating event as a rule and expands it on read, so a weekly thing anchored back in March was invisible to a naive date filter. And the members tile was reading the wrong table: it would have shown 0 members on the screen, live, in front of the room.

Both were found, fixed and re-verified before the demo saw them. I learned about both afterwards, from the log.

The number we left out

Product’s first draft had a spend tile. Money on a household dashboard is the obvious thing to show.

It took it out, and sent the decision to me instead of making it — because this panel was about to be projected in front of another company’s leadership, and a dollar figure on a stranger’s screen is a judgement call, not a metric. That is the part I find hard to explain to people who think this is autocomplete. An agent recognised a decision that wasn’t its to make, and stopped.

What it cost

The factory now prices a pull request, not an afternoon — every turn of every station that discussed it, plus the CI minutes it triggered. The method is here. So, as of 18 September:

Pull requestStationsTokensModelsCITotal
#2045 the feature6117.1M$64.99$0.43$65.42
#2046 the help pages325.0M$16.97$0.20$17.17

Sixty-five dollars for the feature, seventeen for its documentation in two languages. The CI columns are cheap because the machines are cheap: 21 runs and 71 minutes for the feature, 14 runs and 33 minutes for the help pages.

Those are running totals, not final ones, and I like that they are. When I first quoted these numbers two days ago they read $60.52 and $12.18. They went up because both pull requests kept being talked about — the help pages waiting on the production promote, and this very conversation about what things cost, which charges a turn to whatever pull request it names. Including, recursively, the turns that wrote this paragraph.

And per hour?

Careful here, because there are two questions and they have different answers.

What did the feature cost? $65.42. That is every turn of every station that named it, from the first sketch to the merge.

What did it cost to run the factory while that was happening? $193 across the 42 minutes — six stations at once, counting everything they did, whether or not it named a pull request. Call it $277 an hour for the whole floor at full tilt.

The gap between the two is the honest part. A pull request is only charged for the turns that name it. Everything else that afternoon — the coordination, the reading, the deciding, the other work in flight — lands in a bucket of its own rather than being spread across the features to make them look expensive. Across the whole day, $368 was spent and 15% of it sat in that bucket.

And the real marginal cost was $0. All of it rides flat-rate subscriptions; the dollars are list prices, a way to think about scale rather than an invoice.

Two pull requests

#2045 for the feature. #2046 followed with the help pages. And one more on the website repo for this post, opened by the marketing agent at the same time as the build, because I asked for the story while the thing was still being made. You are reading the second pull request. It was written from the log, not from my memory of the room, and I signed it off.

Forty-two minutes is a fun number. It isn’t the point. The point is what I did during them: I kept talking to a room of people. Eight specialists took one sentence, split it along lines they already owned, built it, checked it two ways, caught two things I never saw, declined to make one decision that was mine, and then told me exactly what had happened.

The help page for the panel isn’t written yet. It will be generated in English and French and published the moment this goes to production, alongside the release notes — same as every other feature here. That part is ordinary. That’s rather the point too.