For my WebDAV mount tool (ScsDriver, $5.50 lifetime), the user is mostly the customer. But when I added a referral system, the user became both the customer AND the distribution channel. That changes the UX design space.
Here's what I learned about designing refer-the-friend flows that don't slip into dark patterns.
The setup
User is on a 7-day trial. They can extend by inviting friends. Each accepted invite = +14 trial days, capped at 3 per day.
The user can refer. The user can be referred. The user is also the rate-limited sales channel.
This is a different posture than "user pays, product is delivered."
Dark pattern #1: "Send to all your contacts"
I never built a contact-picker. The temptation was huge — "let user invite all contacts in one tap" would have lifted invite volume 5x immediately.
I didn't because:
- Unsolicited bulk email is spam. Even with permission, contacting people the user "knows" via contact list is socially expensive. The user pays a social cost for every invite.
- Quality drops. Bulk contact invites convert at ~3% vs targeted hand-picked invites at ~30%.
- Disputes. Sending app invites from a contact list creates "wait, you have my number?" awkwardness.
Instead, I built a "share link" UI. User copies their personal invite link, sends it to people they actually want to invite. This is one extra step, but it filters out the spam.
Dark pattern #2: "Only X spots left"
I never added countdown timers to invites. No "Your friend has 24 hours to claim this invite before it expires." No "Only 3 spots left in your area."
These are well-known dark patterns from e-commerce. They create artificial urgency. They don't fit a referral system where the value comes from real relationships.
What I have instead: the +14 days appears in the user's account after the invitee activates. No countdown, no scarcity messaging.
Dark pattern #3: "Earn rewards when friends invite friends"
I considered multi-level referrals. User A invites B, B invites C, A gets a reward for C too. Pyramid-style.
I didn't build it because:
- It's the textbook pyramid structure. Even if technically legal, it looks like one.
- It incentivizes recruiting recruiters, not actual users. I want users, not recruiters.
- Pyramid mechanics compound quality decay geometrically.
Single-level only: User A invites B. A gets +14 days when B activates. Done.
Dark pattern #4: "Limited time 2x bonus"
I considered "this weekend only: 2x invite rewards." Run promo spikes.
I didn't because:
- It trains users to wait for promos. Permanent invite flow would slow down between promos.
- Promo invites are lower quality. Users invite under urgency, not relationship.
- The cap=3 was the load-bearing rule. Promos that temporarily lift the cap undo the cap's quality signal.
I run zero promos on invites. The cap and the +14 days are constant.
What I kept that ISN'T dark
Some things that look dark but aren't:
Personal invite link with user ID. This is necessary for tracking. It's not dark — every referral system needs it.
Visible counters of accepted invites. Wait, I previously said to hide cumulative count. Specifically: I hide sent count but show accepted and credited count. Users need to know when their +14 days landed. Not dark.
Email signature generator. "Add a footer to your email inviting people." Considered but didn't build because email signatures are awkward, not because it's dark.
What I'd never do
Things that crossed my mind and I rejected:
- Auto-invite on signup. "Send 3 invites automatically to your contact list." No.
- Notification spam. "Your trial is ending soon, send more invites!" Not allowed.
- Reward for content creation. "Write a blog post about us and get +30 days." Conflicts with review quality.
- Mutual obligations. "Get +14 if they get +14." Creates perverse incentives.
The principle
Every referral pattern that makes the recipient feel targeted is dark. Every pattern that lets the sender invite with genuine intent is fine.
The test I use: Would the recipient feel respected if they saw the design of the invite flow?
If yes → ship.
If no → cut.
This test catches most dark patterns before they ship.
The product lesson
When the user is also the channel, every UX decision is dual-purpose:
- "Send invite" UX must serve the sender's needs
- AND respect the recipient's experience
The first version that doesn't think about recipient is almost always dark. The first version that thinks about both parties first is almost always clean.
For ScsDriver, the dual-purpose design has held up well across 8 months. No major complaints about invite spam. Conversion rates steady. Quality stable. The product feels honest.
The takeaway
If you're building referral UX:
- Default to no contact picker. Make the user share the link themselves.
- No countdown timers or scarcity.
- Single-level only. Never multi-level.
- No "bonus reward" promos that lift the cap.
- Apply the "would the recipient feel respected?" test to every flow.
The fastest way to identify dark patterns is to design from the recipient's perspective first, then layer in the sender UX.
Top comments (0)