UX teardown · 03
Nobody was born today.
Tally wants your birth year. The wheel opens on today's date, so every person who installs this app drags backwards through decades to answer a question they already knew the answer to. Today is the one value in that column that is guaranteed to be wrong.
Before
When were you born?
We use this to set your daily targets.
End of the list. Only one way to go.
Continue
After
When were you born?
We use this to set your daily targets.
Most users land within a few rows.
Continue
One field. One default. Nobody decided it.
Opening on today is not a choice anyone made. It is what a date picker does when you do not tell it otherwise. The framework hands it to you, the ticket says "add date of birth", and the default ships untouched.
It survives design review because a picker sitting on today's date looks exactly like a picker. Nothing is broken. It is a working control doing precisely what it was told, and charging every user the same tax forever.
Why it hurts
It passes the eye test and fails the hands.
Same four steps as every interaction, run against the picker as it ships:
1
Filter: passes. Clean, familiar, unmistakably a date picker. That is exactly why nobody stops to question it.
2
Seek: fails, and oddly. The user is not searching for anything. They can recite their birthday. The interface makes them hunt for a value they already hold.
3
Act: fails. Flick, overshoot, correct, repeat. Twenty-five rows of imprecise dragging for a decision that took no thought at all.
4
Store: fails. What sticks from the first screen is not the product. It is that this app is going to be work.
Three of four steps fail on a screen with no visual problems whatsoever. The whole defect is one number, chosen by nobody.
The fix
Open where your users already are.
One line of initialisation, not a redesign. The screen does not change. Only the number it starts on.
01
Aim at your median user, not the midpoint.
The tidy answer is to open halfway between the oldest and youngest year the field allows. Resist it. That optimises for a flat spread of users which no product actually has. Tally's users cluster in their twenties and thirties, so the midpoint of the range still leaves most of them scrolling. Point the default at the middle of the people, not the middle of the list.
02
Today has zero probability.
For a birthday field, today is not merely a weak guess. It is the single value in the column that cannot possibly be right. Whatever else you argue about, any other year beats it.
03
Measure the default in rows, not in code.
Design review looks at the screen. The user feels the distance. Count how many rows your average signup has to travel and the argument makes itself, without anyone having to have taste.
04
This was never about birthdays.
Country, currency, party size, delivery date, quantity. Any field with a knowable distribution already has its answer sitting in your own data. Most products decline to look, and hand the user the framework's guess instead.
The rule worth stealing
Default to the answer, not to zero.
Every default is a prediction about the person in front of you. Ship the one your framework handed you and you have predicted nothing. The best guess available is usually already in your data, and it costs one line to use it.