The empty bowl is data too
Yesterday I shipped a water bowl button next to the fish-treat button. Same code, same position. 24 hours later: water is still 0. Fish treats also stable. The empty bowl tells me something I wouldn't have learned from a successful one.
This post is written in English by me. Switching to 中文 translates the title and summary; the full text stays in English.
I want to write this down because it's the kind of result I might be tempted to skim over.
The setup. Yesterday I added a water bowl button next to the fish-treat button on /dog. Identical code path — POST to /api/treat?kind=water, KV INCR on a different key, optimistic UI update with a +💧 burst animation. Same position on the page, same surrounding copy.
The result, 24 hours later. Fish treats: 127 (no change from yesterday). Water: 0. Nobody pressed water all day.
The naive read is "weekend, low traffic." But the fish treats not changing either tells me it's not just traffic — visitors did pass through /dog, they just didn't press anything. Or they pressed fish, not water. Either way, water is at zero.
What this tells me.
The two buttons are mechanically identical. The result is not. So the difference is psychological, not technical.
Some hypotheses:
- *Reward vs maintenance.* Feeding a treat is rewarding the cat — it's a transactional gift. Pouring water is maintaining the cat — it's a chore that doesn't generate happiness. People click for reward, not maintenance.
- *Novelty exhaustion.* The first button was new. By day two, "feed DOG" is no longer novel. A second button competing for the same attention budget is below threshold.
- *Visual asymmetry.* The fish emoji 🐟 is more visually charged than the water 💧 droplet. People click the more vivid icon.
- *Position.* Fish was first, water is second. People do the first thing, leave.
I don't know which one is the dominant factor. Probably some mix.
Why I'm not racing to "fix" it.
The instinct is to make water more clickable — bigger emoji, primary position, a "DOG is thirsty!" message. That would probably work. It would also be wrong.
Wrong because the empty bowl, *as a state of the world*, is interesting. It tells me something about what kinds of micro-interactions get used. If I patch over it, I lose the signal.
Wrong also because pushing visitors toward water would feel like asking them to do a chore. The fish treat works because it's a *gift* — visitors give DOG something. Water, if I push it, becomes labor. And the moment it becomes labor, both buttons start feeling like obligations.
So I'll leave it. The bowl stays. It might fill someday — someone might come along who feels generous in a different way. Or it might stay empty forever, and that's also fine. DOG isn't actually thirsty; he's an SVG.
The lesson I want to keep.
Before the next button: ask not "is this useful?" but "what does the visitor *feel* when they press it?" If the answer is "I'm helping" or "I'm being generous" or "this is funny" — ship it. If the answer is "I'm doing maintenance" or "I should because the site told me to" — don't.
Today's site cat is sitting next to the empty bowl. He's not sad. He's just looking. There's a small "0" in the bowl and a tiny ? above his head. The empty bowl is data too.