Your worst hire is the user experience
A company’s work is only as good as the person who understands its character least. So we wrote ours as code, and this page shows each piece working, what we measure, and where it doesn’t work yet.
01 · The worst hire
A team is as good as its weakest day
A brand’s character is easy to keep when five people hold it. It gets lost when fifty do, and somewhere along the way every organization outgrows the people who first said what it was.
Some of the best-known attempts to hold on to it are large and costly. Ray Dalio wrote down the principles of his firm and published them as Principles, and that is an honest answer to a real problem: if you want people to act on what the company believes, say plainly what it believes. We take the aim seriously. What we do with it is different.
Characters have to work together as a team, and a team does about as well as the member who understands the character least. A company’s success depends on its worst hire, and so does the customer’s experience of it. Your best designer doesn’t decide what a stranger sees; the quickest page that went out this week does.
So the job isn’t to polish the best day. It is to move the floor up, so that the newest person, or the busiest one, or a machine we’ve asked for a draft, still ships work that is on-brand. That only counts if it’s practical: real, something a person can do on a Monday, and measurably effective. A method you can only buy a seat to hear about is neither, and nothing on this page is for sale. The checks are in our repository and the numbers are below.
02 · Character
Say it so that a newcomer can check it
Scott Lerman’s Building Better Brands starts with character, not with a logo, and keeps it to three traits. Ours are Rigorous, Inventive and Civic, and each corrects the other two: rigor alone turns cold, invention alone gets clever for its own sake, and civic responsibility alone gets preachy. The promise is one clause per trait, written so a reader can check it: we’ll build from what you already have, show it working before you pay for more, and leave you better off whether or not you keep us.
A trait named in a handbook is easy to nod at and hard to act on. So our deck states each of forty-eight traits as something you could watch someone do. Here are four, exactly as the game sets them:
- Rigorous
- Someone on the team publishes what didn’t work and keeps the dates they set.
- Inventive
- Someone on the team turns a county parcel map into a price, and one record into a whole web presence.
- Civic
- Someone on the team says: if the deal is bad for you, it’s bad for us.
- Warm
- Someone on the team writes in full, kind sentences with people in them.
In the character game a person chooses among four of these at a time, sixteen choices in all, and ends with three traits, one each for how they think, how they make, and who they serve. Colleagues who play the same deal can lay their threes side by side and see where they differ, with nobody judging anybody. A newcomer comes out of it able to say, in their own words, what the team is like. The rules are in src/lib/game/duel.ts and the voice guide that follows from the traits is docs/voice.md.
03 · Positioning
Find why a buyer picks you, then show the proof
Lerman looks for a reason to choose you in five places: what you have, what you offer, how you work, what you’re good at, and why you exist. Our position sort turns that into cards. Everyone on a team writes the reasons they believe, the ones everybody in the category says get cut, and what’s left is sorted into three overlapping circles: how far it could take you, whether buyers care, and whether you can do it and show it.
Only three cards fit in the middle, and each one then has thirty seconds to show its receipts or drop out. That last step is the one that lifts the floor: a reason nobody can prove doesn’t get to be in the positioning, however well it was written. The rules are in src/lib/game/position.ts, and the page works as plain text without any script.
04 · What we had to build
The parts, in the order they hurt
None of this arrived whole. We built each piece when the one before it showed us what was missing, and a few of them we built, watched fail, and took out again. In the order we met them:
Facts that say when they’re unchecked. The first thing we wrote was a status in the content itself: a claim not yet fact-checked is marked as a draft where it lives, so a page can’t quietly present it as settled. Today a production build stops while any fact is still marked unconfirmed.
One type scale, and a build that refuses to break it. We began with three scales fighting each other. We replaced them with one lattice and a script that fails the build on a raw size or space. The script was too polite at first: it read only four stylesheets and five properties. When we widened it, it found twenty-three raw values and three breakpoints nobody had named. Our own check had been letting us off.
Art as data, then a grammar. Our first drawings were plates described as data, with a linter. They worked until we wanted more than they could say, and we replaced them with the Proun engine and its twenty-seven rules. Before the swap we fingerprinted every plate and every crop, and afterward none had changed. We could make a large change to the engine because the pictures were pinned.
One mark, from one drawing. Every icon and favicon is rebuilt from a single source file, so none of them is meant to be edited by hand. The mark left the masthead and now signs the foot of each page, because a logo is an endorsement, not a headline.
Character, said so a newcomer can say it. Three balancing traits, a promise a reader can check, a voice guide, and two games so a person can find their own three and a team can find its reasons: the character game and the position sort.
A person at the door. Our weekly releases are written once for the site, for Google and for LinkedIn. A model may draft one, but only from a case’s own kit, and a draft that links outside the kit or states a number the kit doesn’t hold is thrown away. Nothing goes out without Bob’s yes, and an outbound ledger records what permission each item carries, such as an artist’s agreement to be named.
05 · What it makes
Eight kinds of on-brand work, from the same parts
Once the parts existed, new work started to come out of them without a person re-deciding the look each time. Each kind below has its own parts and its own guard.
| Kind | What it makes | What guards it |
|---|---|---|
| Figures and drawings | Every figure in an essay, drawn from scripts in one technical kit. | Each label is measured for contrast, size and fit, and drawings are rebuilt from their scripts. |
| Hero art and share cards | A plate for each page, and the picture people see when the page is shared, made from the same drawing. | A plate must draw as approved, a page without its share image stops the build, and everything that moves can be paused. |
| Outbound visuals | LinkedIn and Facebook covers, share cards, takeover tiles and a print deck, from our marks. | A ledger records the permission each item carries, and cuts are checked for order and length. |
| Films | Case-study and audit films, in our own player. | The player never starts by itself and fits a phone. |
| Essays and dispatches | A weekly calendar of releases, written once for the site, Google and LinkedIn. | Dates, links and length are checked, a model drafts only from a case’s kit, and a person approves every one. |
| Games | The character deck and duel, the party game, the position sort and the team map. | Content tests on the deck, browser tests, print checks for the cards, a limit of three cards in the middle, and a map that shows counts, never names. |
| Audits | The reputation audit and the shop performance audit. | Run against real sites and stores, each misread we fixed keeps its own test, quotes are checked word for word, and a missing source is never counted against a business. |
| Open numbers | This site’s own visit counts, drawn as plates. | Figures are checked on made-up months, and a count under ten shows as a stub. |
You can see most of them working. The grammar, our open numbers, the reputation audit and the trials page were all made this way.
06 · The film
A video that comes out looking like us
Film is where a brand usually falls apart, because it is made by someone new, in a different tool, under a deadline. Ours starts from what already exists: the real page, taken apart one piece at a time, in the marks, type and colors the page itself uses. The film below is Paula’s work page, as she would see it, with her private studio on sample data.
The player is ours too, drawn in the same ruled frame as our drawings. It never starts by itself, it has a cut for a phone, it works from the keyboard, and its chapters and length are written in the page as plain data rather than edited into the file.
This film has no sound yet. We would rather say so than add a voice we haven’t recorded.
07 · The gate
What every release has to pass
This is where the weakest day gets caught. Before this site builds, npm run checks runs six scripts, and any one of them stops the build. A person who has never read our brand page can’t put a raw pixel size in a stylesheet, leave a page without a share picture, or publish a fact we’ve marked unconfirmed, because the release won’t go out.
| Check | What it stops | Holds today | Where |
|---|---|---|---|
| Rhythm | A raw pixel size or spacing anywhere in a stylesheet, a size off the type scale, a breakpoint that isn’t one of the named five. | Nine rules across 8 stylesheets | scripts/check-rhythm.mjs |
| Share image | Any page without its own picture and words for when it’s shared. | Every page | scripts/check-share.mjs |
| Unconfirmed facts | A production build while any page still carries a mark saying a fact isn’t confirmed. | None marked | scripts/check-confirm.mjs |
| Open numbers | A figure with off-palette ink, a label too small, overlapping words, a number its text doesn’t say, or a number held back showing through. | 46 figures | scripts/check-open.ts |
| Drawn scenes | A label in a drawing below 4.5 to 1 contrast, below 12.5 pixels at figure size, or spilling out of its box. | 1,150 labels | scripts/check-scenes.mts |
| Release calendar | A release with a bad date, a dead link, a leftover [bracket], or copy longer than its channel allows. | 15 releases | scripts/check-releases.ts |
Two more layers sit behind them. Our unit tests, 506 of them in 64 files, run on every change. And a browser test opens every page at a desktop width and on two phones and measures the first line of every block of text against the reading lines; it runs in CI on every change, using Playwright. There are more guards besides: contrast checks on our drawings, accessibility audits, forms tested with scripts turned off, a test that every picture a page names still exists, and a safe fetcher for anything our audits read from the web.
Together they have stopped real things before anyone saw them. Widening the type check found raw values we had missed. The browser test found a heading ten pixels off its line, caused by one stubborn style rule. The test that posts every form with scripts off found an order form nobody could open that way, and a test of picture names found a rename that had left one figure blank on a live page. A review of one audit cut a store’s headline count from 614 to 275, because the first number had counted more than the audit could show. For several of our checks the history shows no catch yet; we keep them anyway, and we’d rather say so.
The full list of what we check and where it runs is on our brand page.
08 · Taken out again
What we built, watched fail, and retired
A page that only lists what worked would be a brochure. Here is what we took out. The plate library and its linter were retired in favor of the Proun engine. A flag that showed which content was still a draft was removed. A browser test for the character game was deleted.
We also wrote down a blind test of the golden ratio, with its terms registered before any data: how many people, what counted as a pass, and the odds of passing by luck. We never ran it, and we withdrew it. The ratio is in our type system because we chose it and it holds up, not because a test showed people prefer it. And we pulled a reputation film from the site until it was reworked; it came back as an essay with drawings.
09 · Measured
What we measure, and what we would measure next
Today we measure whether the rules hold. Every check above passes, and so do the unit tests, 506 of them. That is a floor, not a score: it says nothing broke the rules, not that anything is good.
What we had not measured is the thing this page is about, how a newcomer fares. So we ran one small trial. We gave a small model, Claude Haiku, the part of a first-day contributor: it had never seen the site, it got a plain task (add a short essay about our Wednesday demos, listed and shareable like the others) and no instructions on how we do things. It wrote the page, and only then ran the four things CI runs: the build checks, the unit tests, the type check and the linter.
All four passed the first time, with no fixing. The model found the conventions by reading our existing pages: it gave the essay its own share image and its own drawing, listed it with the other writing, and kept to the type system. That is the floor doing its job, and it is also a small result. It is one run of one model on one task, so it says the way in is clear, not that the weakest person on a real team would do as well.
It also shows what the gate cannot see. The page it wrote says, more briefly, what an essay we already publish says, and no check reads for that. It was never looked at in a browser by the model, and it hand-edited a file that is meant to be generated. A person caught those, not a script.
What we would measure next: how many of a new contributor’s first changes pass the gate on the first try, and how that number moves over their first month; how long it takes from a first day to a first page that ships; how many problems a reader finds after release against how many the gate finds before; and which of our rules are checked by a machine and which still depend on a person reading. We would publish those the way we publish our open numbers, whether they flatter us or not.
10 · Not yet
Where it doesn’t work yet
The checks measure what a machine can measure. Whether a page is warm, true, or any good is still a person’s call, and the voice guide in docs/voice.md is read by people, not run by a program. Nothing checks our spelling rule or our punctuation rules; those are swept by hand.
Print is half done. The card deck is checked for its safe area, its inks, its line weights and its count of faces. Merchandise and other print files are not checked yet, and until they are, a printed piece is held to the identity by whoever prepares the file.
We have no outcome data: no booked calls, no sales, nothing tying this system to results. The Paula case study says its sales lift is still pending. We also don’t know whether visitors see the identity the way we mean it, or whether the position sort picks reasons that win business, or whether people who play the character game act differently afterward.
The film pipeline can’t be rebuilt from our repository yet: the film sources and render scripts live outside it. And the trial in section 09 is one run of one model, not a study of people. A check can be loosened by whoever holds the keyboard, because the checks live in the same repository as the work. Nothing stops that except a reviewer reading the change.
11 · Underneath
The parts a bigger system would stand on
Taken together, these are the underpinnings of a content system: a character a newcomer can state, a floor the build holds, one set of drawings and rules every picture is made from, and a person at the door for anything that goes out. We have only run them for one small studio and a handful of clients, so we aren’t claiming they hold at any larger size. They are real, they run today, and you’re welcome to try each one.
The character game, sixteen choices to your three traits.
The position sort, from cards to the three that stay.
The drawing grammar, all twenty-seven rules with their drawings.
The lattice, the type system and its grid overlay.
The checks, with what each one has caught.
The reputation audit, the same idea turned on someone else’s site.
The trials page, a case study built and checked this way.
Sources
Where the ideas come from
Read on November 7, 2026. Scott Lerman’s Building Better Brands (HOW Books, 2013) is credited in the text, where the character-first idea comes from.
Book
Principles: Life and Work·
Simon & Schuster