One of my apps kept a graph of everything its user had ever shown it.
Every entry went in. Each was embedded, set beside the entries it resembled, and linked to them. Then, when the app answered the next entry, the only history it consulted was one paragraph, written once at onboarding. It never read the graph. Its two hundredth answer saw the same history as its first.
That app was the studio's flagship. The document that governs the studio names it as the clearest expression of what the studio is for. The gap was found by scoring it against that same document.
One sentence and eight numbers
Machine Studio is the name I build iPhone apps under. It has one thesis, written down before any of the scoring: small, opinionated machines that "intercept an existing behaviour, perform one legible transformation, and produce something worth keeping, sharing, or building upon."
The thesis becomes eight questions, each scored from nought to five, out of forty. Four are about the product. Does suitable input turn up in the ordinary course of someone's day? Can they reach the app from where that input already sits, in a gesture or two? Does it interpret, rather than store? Does each use make the next one better? The other four ask whether the value can be shown to a stranger. Does the result surprise? Can it be demonstrated in ten to twenty seconds of vertical video? Does it leave the app as something worth sending? Does one short demonstration explain it?
Then three hard gates. The demonstration must score at least three. So must the explanation. And either what the product accumulates or what its results leave behind in the world must reach four. A product has to compound into something hard to replace, or travel through what it makes.
The rubric's sharpest lines describe the failure I had built. "A saved history or archive is not enough." And a test that needs nothing but honesty to run: could a fresh general model produce substantially the same result from the latest input alone? A product that fails it has a name in the canon. It is a fake-learning machine.
Two columns
On 18 August each product was scored twice: once from its specification, once from the code that had actually shipped. Only what ran in a build a person could install and use that day counted. Specified and unbuilt, staged on a branch, held back for later: all of it scored at what was built. Where the columns disagreed, the shipped column was the score.
The flagship fell from 35 to 32. Its accumulation dropped from four to two, and it failed the third gate. It was the only product to lose a gate between the two columns.
Zinepic, which turns a camera roll into issues, came out top at 33, and was the only product to pass all three gates. It lost a point as well. Its share extension could not open the app, because Apple gives an extension no sanctioned way to, so shared photos land in a tray and wait. And the extension sat on a branch, not in the build Apple was reviewing, so the version a stranger could install had no share entry at all. The scorecard set the result against the canon's praise for the flagship: "On paper it is. In the build, Zinepic is."
Driftspeak scored 22 and failed the third gate. Its demonstration scored five. What it accumulates scored one. One product scored 24 in both columns, the only one whose document described exactly what had been built. The fifth had three design documents and no code, and the scorecard declined to give it a number. "0 is not a rating, it is an absence."
The scoring went wrong once, in the other direction. The first pass gave Driftspeak 20, because the video format it would be demonstrated in had been specified and never made. It had been made, in a folder the first pass had not opened. The corrected score sits in the scorecard with that admission beside it.
Letting the favourite lose
Twelve days later the studio adopted a distribution plan, and it named Driftspeak as its lead product. Its first section exists, in its own words, so the document "doesn't silently import claims as facts." That section now carries the 22 beside the choice. It sets out the case for Driftspeak anyway, and the case against: that its distribution would pour new users into the portfolio's leakiest product loop, with nothing accumulating to keep them. Then it marks the question open, to be settled before any money is spent on creators.
The same section records that none of the short videos made to demonstrate the product had been posted. Every date in the experiment log was blank. "The format exists; its performance numbers do not." The log's dates are still blank.
The flagship's gap was closed in code the day after the scoring. The function that handed the model its onboarding paragraph was deleted, and retrieval over the graph now reaches the prompt. A comment beside the new wiring explains how the old one lasted. It sat in a file the test runner cannot import, which is how it "survived every review that checked the consumer." The app has not been rescored, and it is not on the store.
Product after product
Five apps sit under the studio's name now. One helps actors learn their lines. One turns a camera roll into issues. One is AMES Pool, a pool game: one table, one red eight, one frame a day. Four are on the App Store and one is in review. None has a revenue or download figure on record. Each has its own repository and its own rules file, which every coding session reads before it starts. They share no platform, and most of my other work is not even written in the same language. What moves between them is method, not code.
Nemolines sells one upgrade, priced by Apple's store at runtime in the buyer's own currency. Four places in the app, when the store had not answered, fell back to a price typed into the code, in dollars. Then the price went up in the store, and on two purchase buttons that fallback would have understated the charge threefold. The fix gave one owner to the question of whether there is a price to show. A second model reviewing it found the tests would stay green if a typed price came back, because they checked the owner and not the screens. A scan of the source now fails on six shapes of hardcoded price.
Zinepic promises that a saved zine redraws exactly from its saved plan. In September the Mac it is built on moved to a newer Xcode and macOS, the system's type engine moved with them, and 63 of its 74 recorded fixtures went red. All 74 were captured before anything was touched. The fix froze the font measurements into a table in the code, and afterwards all 74 rendered byte-identically. The check that compares that table with the system caught two wrong rows on its first day and then ran nowhere, until one line in the rules file told every session to run it before a build goes to Apple.
Another app was rejected in August under Apple's guideline for copies. The idea was unusual. The shape was not: two of its first three screenshots were, affordance for affordance, a messaging inbox and a message thread. They moved to fourth and fifth. The next review turned it down for something else, a missing Terms of Use link on the paywall. It went back into review on 25 September.
AMES Pool was the fifth, the one with no code. Five minutes after the scorecard recorded that its folder held nothing to score, the folder got its first commit. Before any code, its specification went to a second model twice. The first round returned 22 findings and the second 14, and every one was accepted. The build that went to the store was ready five days later. It went on sale on 15 September.
The label
On 26 September AMES Pool's page on machinestud.io changed from Coming to iPhone to Available on the App Store. The site's own validator refused the new label until the record of the release was written in beside it.