From “we should hang out” to remembering it
Most plans die in the group chat. Hangout carries one from “we should hang out” to remembering it, and a feature earns its place by moving a plan on.
Everyone gets in
Joining costs a name. No passwords, no app: the friend who hates signing up still joins. A private link signs you in elsewhere.
Finding a time
- The big idea
It gets honest answers. You mark your week before you see the group's (the blind grid). Then Hangout recommends the longest shared stretch, naming who it leaves out.
This week, not a template. Hours belong to one week.
Showing up
It ends in a calendar. “I'm in” gives you a Google Calendar link and an .ics file.
It's live. Changes appear at once, and a full event's last spot goes to the first tap (ADR 6).
It holds up. On a phone, a keyboard, a bad connection, without JavaScript.
Remembering it
It's remembered. Afterwards, whoever went adds photos and a rating.
Why Hangout beats the other ways
The same four friends, planning the same evenings, two ways.
When2meet: an open grid
Shows everyone's paint as you paint yours, then stops at the overlap.
In the open grid, each friend sees Thursday 7pm already marked and marks it too, so it looks like everyone's free then, though two of them aren't.
Hangout: a blind grid
Asks first, shows second, and ends with a plan.
In the blind grid, nobody sees the group's week until they've marked their own, so each friend marks when they're really free, and Saturday 5 to 7pm comes out as the time all four share.
Doodle starts from one organiser's guesses, and hides answers only on a paid plan, forever, even from those who answered.
An open grid gets a group's performed week; a blind one, its real week.
How the blind grid works (ADR 10)In open Doodle polls people approve what already looks popular, to seem cooperative, rather than when they're really free.
How people answer also follows social norms.
Built for your friends, not everyone
“no one else will ever use”
“designed for use by a specific social group”
Hangout is generic, but each group's copy is its own. So it leaves out:
Passwords and Google sign-in. Calendar writes need OAuth, which an unverified app offers only to test users.
A chat. Comments live on a plan; Hangout ends the group chat rather than becoming one.
A feed, followers or discovery. Friends exist only to invite to one-off events; Explore lists only events their hosts made public; block and mute exist because those let strangers reach you.
The cost of no passwords: whoever holds your sign-in link is you. Access is checked server-side (ADR 11).
How we know it works
Enforced, every push
spec/ checks these against the running app.
- a stranger with the link joins; hours survive a restartcrit-8.test.ts
- the top recommendation is the longest shared stretch, naming who it missescrit-8.test.tsgroup-page.test.ts
- calendar times survive daylight savingcrit-8.test.tsedges.test.ts
- nobody sees the group's week before marking their ownblind.test.ts
- nobody reads or changes another's things; every change is logged by whocoverage.test.tssecurity.test.tsactivity.test.ts
- a change reaches other open pages within a secondlive.test.ts
- of simultaneous taps on a last spot, exactly one winswaitlist.test.ts
- keyboard, resize, slow or dropped connection and accessibility, in real Chromeholds-up.test.tsa11y.test.ts
Judged, with real groups
What no test can say.
- Does it beat the group chat?A real group plans a real hangout here: a plan, in fewer messages.
- Are blind answers more honest?Afterwards, each person is asked if they marked their real week.
- How fast does a newcomer get in?Timed, unhelped, on their own phone. The floor: link to calendar for two in 12 actions.
How each is judged, and what passes: docs/judging.md
These sections are also my README for the course, approved by my tutor, Bill. Every source is real and checked; the demo groups and chats are made up. Prefer plain text? Read it here