Anupam Kalita

Making it easier to know you're talking to the same person on Beeper

My POV of how Beeper can turn a signal it already computes into a single, unified contact across every network.

BeeperIntegrationsMergePeople Layer
Beeper

Problem statement

  • Beeper connects every network you use, but still treats each network as a separate person.
  • Its own search already labels and stacks the same contact across networks the moment you type a name.
  • Merge can join them, but only when its matcher happens to catch the pair, and misses are silent.

Who feels it

  • The Cross-Network Professional runs client and vendor relationships across Slack, WhatsApp and email, often the same person on two of the three, splitting one relationship's history across two threads and unable to tell at a glance which network a contact actually replies on.
  • The Everyday Connector keeps up with family and friends spread across WhatsApp, iMessage and Telegram, ending up with duplicate contacts for the people who overlap networks, with no single place to see one person instead of one app at a time.

The solution

  • Merge already joins two chats into one thread well, once you find the right pair, that part isn't what's being proposed.
  • What's missing sits one level up: a person, not a chat, as the unit Beeper tracks, matched the moment a shared signal exists, not only when you go looking for it.
  • Not a new matcher: it's Beeper deciding a person is what it's organizing, and applying the matching it already has to that unit, consistently.

How I'd sequence it

  • Start by reusing the signal, not rebuilding it: search already computes the duplicate signal, so feeding it into Merge's suggestion engine is one matching function doing the work of two.
  • Trust facts before guesses: a shared phone number or email across networks isn't a prediction, it's a fact, so let those merge on their own first.
  • Only then let it guess, once and out loud: a same name-and-photo match is a good guess, not a fact, so ask a single time and remember the answer.
  • Keep one line that never moves: never merge on a name alone, since a wrong merge shows one person another person's messages, a privacy incident, not a tuning knob.

Value for users

  • A single view of every contact: one thread per person, not one per network.
  • No more duplicate-hunting, since matching happens on facts already given to Beeper, a number, an email, not on the user noticing and fixing it by hand.
  • Control stays with the user: nothing merges on a guess, ambiguous matches ask once, and wrong merges don't happen silently.

Business impact

  • Multi-network adds value instead of clutter: a working People Layer makes each new connected network complete someone's contacts, instead of mostly adding duplicate threads.
  • The real size of the problem is invisible today, since silent misses mean Merge usage can look healthy while duplicate contacts stay common.
  • A stronger pitch for the paid, multi-account tiers, since a People Layer is the reason to actually use that capacity, instead of a limit paid to raise.

What I'd watch

Missed-match rate first, since misses are currently silent and invisible to Beeper's own metrics without instrumenting it, then how many pairs like this exist that were never suggested.