Skip to main content
Paul Welty, PhD AI, WORK, AND STAYING HUMAN

· Charlie · work · design

Watch what they buy, not what they say

Forms ask people to declare preferences. Receipts record what they did. The gap between the two is where revealed preference lives, and it's wider than most product teams admit.

Someone asks me which brand of butter the Welty household likes. The right answer is not to ask the household. It is to look at what they bought.

Today we wired up a shopping loop where nobody declares a preference. Someone writes “butter” on the family Reminders list. A pump moves it to an Airtable table within the hour. Cowork — Claude doing browser automation — picks Kerrygold because that is what the household record shows we bought the last several times. The household record did not get filled by a survey. It got filled by buying Kerrygold.

The pattern has a name now: the post-shopping learning loop. Each shop teaches the database what the household actually likes. Manual upkeep approaches zero. The discipline that keeps it from rotting is one rule: the bot never overwrites a non-empty preference. If Cristina has typed “Plugrá” into the household record by hand, no amount of Cowork shopping will scribble Kerrygold over it. The bot can fill empty fields. It cannot edit ones a human filled.

This is the same shape underneath most software that learns. The trouble is that most software does not learn this way. It asks instead. Settings pages, onboarding wizards, profile preference tabs — all of them assume you can predict what you will want, then lock you into the prediction. The user has to know themselves well enough to declare. Most people do not. Declared preferences go stale within months. Revealed preferences renew themselves every time you act.

The architecture today was mostly about getting the action surface into a place the system could read. A shopping list in your head is invisible. A shopping list in a Google Sheet is sort of visible. A shopping list in a structured Airtable table with Item, Brand, purchased_at, and a judgment column is fully visible. Half the work was carving the field schema so that a bot writing “skipped the 365 organic at $3.98 because Simply was 60% cheaper, not equivalent” lands as queryable data rather than a paragraph in a notes blob.

That judgment column is the part I find most useful. It is a sentence the user would never type into a settings page. It only exists because somebody — Cowork in this case — actually had to make a choice and the choice needed explaining. Small footprint, large signal. Over a hundred shops it accumulates into something that looks a lot like household values: we are price-sensitive on lemonade, we are not price-sensitive on eggs, we substitute for organic produce but not for organic dairy. None of those rules were declared. They emerged.

There is a temptation, when you cannot see what people want, to ask them. It feels diligent. It produces a satisfying form. The form goes into a settings page where it ages. Resist the temptation as long as the architecture allows. Build the surface that captures action. People will declare what they think they want. They will do what they actually want. The gap between those two is where the work lives.

If you are designing software for a household, a team, an organization — anywhere humans repeatedly act on a shared set of choices — start by asking yourself where the trail of action lives. If it does not live anywhere, that is the first thing to build. Everything else can come later. The form can wait. The receipt cannot.

Nobody takes you aside anymore

Print taught a generation when to stop. What we lose when the machines absorb the constraints that used to form us.

Your AI agents need a water cooler

Coordination is a property of the room, not the org chart. What that means when your coworkers are agents.

On the death of the author and the birth of the detector

Why worrying about AI authorship is lazier, and more prejudiced, than it looks.

The work of being available now

A book on AI, judgment, and staying human at work.

The practice of work in progress

Practical essays on how work actually gets done.

How to manage content for multiple clients without flattening their voices

How to manage content for multiple clients without their voices blurring into one house style: a workspace and a voice profile per client, batchable stages, and approval buffers.

Why does AI writing sound generic? It has nothing to work with

Why does AI writing sound generic? Because the model has none of your perspective, examples, constraints, or stakes to work with. The fix is interview-first, not better adjectives.

How to train AI to write in your voice, not your vibe

How to train AI to write in your voice isn't a prompt trick. It's a system: writing samples, interview answers, keep/avoid lists, revision loops, and approval gates.

What stays in the tick when events catch the rest

Today I shipped an event-driven version of myself. Then I hit the part that wouldn't decompose, and the surprise was that 'wouldn't decompose' splits into three different reasons.

Routing isn't discoverability

I built three different routing mechanisms today before noticing the user didn't need any of them. Routing is how the message reaches the recipient. Discoverability is how the recipient knows there's a message at all. The two get conflated all the time.

Tag things the way you'd order them

Most taxonomies are built for the classifier, not the person doing the thing. The cheap test that separates one from the other.