For my $5.50 lifetime ScsDriver WebDAV mount tool, the 7-day trial is extendable via successful invite activations. After 8 months of running this, I learned that visible numbers invite grinding.
The fix was to hide them.
The visible-numbers problem
When I first shipped the referral program, every user could see:
- "Invites sent: 14"
- "Successful invites: 6"
- "Days earned: 84"
- "Rank: #142 of 1247 inviters this month"
- "Multiplier: 1.4x for top 10%"
Within a week, I had clear evidence of grinder behavior:
- 12% of inviters sent invites to accounts that lasted < 60 seconds
- 8% of inviters hit
invites_per_hour > 4for stretches of 6+ hours - 4% of inviters used disposable email services in > 50% of invites
- 2% of inviters had invitee clusters with high inter-cluster similarity (one operator, multiple accounts)
The visible numbers were a roadmap for grinders.
What I removed
I removed:
- Total invites sent — replaced with "your invite history is doing well" (vague)
- Successful invite count — replaced with "your invite rewards are working" (qualitative)
- Days earned — replaced with "your trial has been extended" (no count)
- Rank — completely removed
- Multiplier — replaced with "thank you for being a top inviter" (private)
I kept:
- Last invite sent timestamp — needed for cooldown timer
- Next cooldown reset time — needed for cap=3 enforcement
- Current trial end date — needed for utility
The impact
Within 30 days of hiding numbers:
- 12% grinder rate → 4% (66% reduction)
- 8% rapid-fire rate → 2% (75% reduction)
- 4% disposable email rate → 1.5% (62% reduction)
- 2% cluster rate → 0.8% (60% reduction)
Real-user satisfaction (measured via NPS-style survey on a random sample):
- Visible numbers: NPS 31
- Hidden numbers: NPS 58 (+27 points)
Real users didn't want to see their grind stats either. They were embarrassed by the numbers even when legitimate.
What I learned
Visible numbers create grinders. Anyone who can see their own stats will optimize them. If you want honest engagement, hide the scoreboard.
Qualitative feedback is fine. "Your invites are working" tells a real user what they need to know without giving a grinder a target.
Cooldown timers stay visible because they have utility. Users need to know when they can invite again. That's not a score, it's a constraint.
Removing the leaderboard was the single biggest win. The competitive element was always attracting the worst actors.
"Top inviter" recognition is private. Tell people they're appreciated, but don't quantify it publicly.
The pattern that worked
def user_visible_stats(user):
return {
'last_invite_at': user.last_invite_at,
'cooldown_reset_at': user.cooldown_reset_at,
'trial_end_at': user.trial_end_at,
}
def user_qualitative_message(user):
if user.invitee_activation_score > 6:
return "Your invites are bringing in great people. Thank you."
if user.invitee_activation_score > 3:
return "Your invites are working. Keep it up."
if user.invitee_activation_score > 0:
return "Your invites are starting to come together."
return "Your invites will start working as your invitees activate."
No numbers. No ranks. No multipliers. Just useful information for the user and gratitude for the effort.
Why hiding works
Grinders optimize what they can see. By removing the optimization target, you remove the incentive structure. Real users don't need to see their stats to feel appreciated — qualitative feedback works just as well, with less downside.
The boring answer here is also counterintuitive: the less users see, the more honestly they engage.
For ScsDriver's referral program, this change held up over 8 months with minimal iteration. The hidden-numbers system became the default; visible numbers never returned.
What's still visible
Three things. All have utility:
- Last invite timestamp — for the user to know when they sent their last one
- Cooldown reset — for the user to know when they can invite again
- Trial end date — for the user to know when their subscription expires
Nothing else. No counts. No ranks. No leaderboards. No multipliers. No public recognition beyond "thank you for being a top inviter" (which is also hidden from other users).
That's it. The system rewards honest engagement and quietly thwarts grinding, all by removing what doesn't need to be seen.
Top comments (0)