Twenty types in two days
Every screen in my Control Plane groups its items along one axis: thread, sender, vendor, category. The axis becomes the left column of the screen. A good axis fills that column. A bad one gives you a column with one item in it.
On 11 September the app had 13 types of screen. On 13 September it had 33, because Claude and I had applied the pattern to everything in reach: mail, letters, rules, posts, calls, accounts, the ledger, transactions, invoices, purchases. We did that without checking whether each axis would fill.
What we measured
Before building the mail screen we measured the obvious axis, the thread. Of 5,186 threads, 4,442 hold one message. The screen would have shown one segment for most of the mailbox, and it would have looked populated rather than wrong.
The sender axis held: 1,216 of the 1,500 loaded mails, 81 percent, belong to a sender with more than one message. That is what we built.
The same test decided the other screens:
- Purchases: vendor has 268 values and 97 percent of the rows sit in a group larger than one. Built.
- Transactions: category and subcategory reach 99 and 98 percent. Built.
- Ledger: amounts are not an axis, with 135 distinct values over 155 rows. Type and company reach 100 percent each. Built on those.
- Greeting cards: 13 cards, and four of their fields were empty on every card. Not built.
The rule of thumb in the decision record: below about 25 percent of the rows in a group of more than one, it is a label and not an axis.
What measuring also found
To measure an axis you read every row, and rows that do not behave announce themselves. The measuring found that 8,275 of 12,089 bookings had a zero amount, and that none of the 70 invoices had a PDF attached or was booked. The zero amounts changed a decision: the Transactions screen now says "no amount" where it used to show € 0, because a zero and a missing amount are two different things.
The two I built against the measurement
Of the eight axes in the decision record, six passed. Two failed: posts, where the platform is almost one value, and invoices, which all come from one sender. We built both anyway, because I preferred a consistent app to a measured one. The thin axis is written into the configuration of each type, with the number, so nobody reading it later takes the axes for good.
