Craft · policy
Design as moral seriousness.
By Steven Haller · 2026-05-27
The most consequential design choice on a justice-tech site is rarely the typeface. It is almost never the color palette. It is, with embarrassing reliability, the default state of a single toggle on a single screen. The toggle most people never click. The default the engineer set on a Tuesday afternoon because the spec did not say either way and the deadline was Friday. That default is the policy. That default is the moral statement.
I do not say that as a rhetorical flourish. I say it because I have spent three years now designing the interfaces of systems that handle vulnerable populations, and the line I keep running into is the same. Every visual decision that looks like taste is, on closer inspection, a decision about consent, dignity, or exposure. Every default is a decision about who carries the cost of the wrong outcome. The thing the discipline calls "design" is, in any context where the user did not choose to be in the system, a question of policy. The visual layer is the policy layer. There is no neutral default.
The photo on the offender card.
The example I return to is the offender card on peoplenotnumbers.org. The card displays a person who is currently incarcerated in the Michigan Department of Corrections system. The MDOC photo of that person is a public record under state law. Most public corrections-data sites display the photo at the top of the card, large, centered, with a name in heavy weight underneath. The visual hierarchy says this person, this face, this fact. The card is functionally a mugshot, presented as a mugshot, indexed by a search engine as a mugshot.
The decision on People Not Numbers was to hide the photo by default. The photo is still in the dataset; the photo is still public-record under the state statute; the photo is available behind a deliberate disclosure click. It is not on the surface. The visual hierarchy is name first, sentence facts second, the institutional context third, the photo last. The card looks different. The card reads different. The card is, in a literal sense, a different policy.
None of the underlying data changed. The dataset is the same dataset. The state's record is the same record. The thing the design changed is what the surface of the system assumes about why a user landed on the page. The card defaults to the assumption that the user is a family member, a counsel, or a researcher. The card refuses to default to the assumption that the user is a stranger looking for a face. That refusal — a single CSS rule and a single line of JSX — is the policy. It is also the design.
The three-email intake on the locator.
The second example is the intake form on findbehindbars.com. A locator front for incarcerated people has, structurally, three classes of inbound contact. Families looking for somebody they cannot reach. Corrections operators who want to integrate or talk procurement. Press who are working a story. The three classes have, by any honest analysis, three different needs, three different speeds, and three different safe channels.
The default intake on most locator sites is one form: a single email field, a single dropdown of "I am ...", and a single text area. The form delivers all three classes to a single inbox. The inbox is read on the same schedule. The press email lands next to the family email. The family email lands next to the procurement email. The system has, by design, said that the three are equivalent.
The intake on findbehindbars.com is three separate emails, three separate forms, three separate humans on the other side. Families is staffed first, fastest, with the warmest reply. Corrections procurement is routed to a second address with a delayed reply window and a different signature block. Press is its own queue, with a press kit and a clear reply path. The three-channel form is more work to maintain. The three-channel form is the design. The maintenance cost is the policy choice.
The dignity-review footer.
The third example is the footer on every offender card on People Not Numbers. The footer is small. Most users do not scroll to it. The footer says, in plain language: this is a public record about a real person; if anything here is wrong, or if its presentation here causes harm, write us. The footer links to a monitored email address and includes a pre-filled subject line that tells the responding human which record the writer is asking about.
The footer exists because in the first month of operating the site, three letters arrived from incarcerated people whose families had read the cards aloud over the phone. The letters were polite. The letters were specific. The letters were also asking a question that the design of the site had not anticipated: how does the subject of a record correct it. The footer is the answer. The footer is small because the work it does is constant and the work does not need to be loud. The footer is also the second most-clicked element on the card, after the name.
The footer is a design element. It is also, in the strictest sense, the part of the system that lets the subject of a record exercise something resembling a right of reply. Two functions, one element. The design choice is the policy.
What this looks like across the studio's work.
The same posture shows up wherever the studio works. linkage.studio defaults the privacy policy to "we do not retain your case data after thirty days" because the policy is a product feature; the privacy policy lives in a footer link on most reentry apps and lives on the home page on this one. closedladder.studio defaults a portfolio company's first identity package to a low-volume monochrome system because closed-ladder companies are sensitive markets and the brand is the part of the company that draws attention they did not ask for. clutchjustice, the personal-brand redesign for Rita Williams's judicial-misconduct work, defaults to publishing the source-document trail underneath every claim, because the cost of being wrong on the record is much higher than the cost of looking restrained on the home page.
The unifying pattern is that in any system handling vulnerable people, the place to win the design is the default. The default is the place where the user is least likely to be paying attention. The default is therefore the place where the design either does the moral work or, by omission, declines to. There is no third option. The default is policy regardless of intent.
The unromantic conclusion.
I have come to think of this as a working definition of moral seriousness in design practice. Not the loudly stated mission on the about page. Not the values list in the pitch. The default state of the toggle nobody is looking at. The hierarchy of the card in the section nobody scrolled to. The footer on the page nobody finished reading. The work is unromantic. It does not photograph. It is mostly small CSS rules and small policy decisions written down in small style guides and small READMEs. The studio's working method, across every client and every project, is to find the default and to put the moral weight on it.
If you can't put a number on it — if the default cannot be expressed as a setting, a value, a class, a rule that ships in the codebase — then you do not actually know what you mean. Write the default down. Make the default the policy. That is the design. The rest is decoration.