Does posting too much (or too little) hurt my reach?
There is no posting-frequency penalty in the released ranking code — no "you posted too many times today" counter that downranks you. But two real mechanisms in the code mean frequency still matters indirectly: an author-diversity rule limits how many of your posts appear close together in one person's feed, and the conversation-dedup filter keeps only the best post per conversation. So posting more doesn't get you penalized — it gets you diminishing returns, because the system won't stack your posts in one feed. Quality per post beats volume.
"Post 10 times a day" and "don't post more than 3 times or you'll get throttled" are both common advice, and both assume a frequency rule. The released code has no such rule — but it does have two mechanisms that shape how volume translates into reach.
No frequency penalty exists in the code
We looked for a per-author rate limit, a daily-post counter, a "you've posted too much" score
reduction — anything that penalizes an account for posting frequently. There isn't one in the
released pipeline. Your tenth post of the day isn't scored lower for being the tenth.
The released ranking pipeline contains no link-penalty, URL-deboost, or external-link downranking mechanism. The only link-related signal is click_score in the weighted scorer, which is a positive term. Claim is scoped to the open release at the pinned commit.
But author diversity spreads you out
The scoring stage applies an author-diversity decay: each additional post from the same author
in a single feed is dampened, so one account can't dominate someone's timeline. Posting more often
doesn't penalize you — it just means your posts compete with each other for the limited
in-feed slots one author gets.
Within a single feed response, candidates from the same author are sorted best-first and each subsequent one is multiplied by (1 \− floor) \× decay^position + floor \— a geometric decay toward a floor, so only an author's top-scored post receives full value per feed load. The decay and floor constants are in the withheld params module.
And dedup keeps only your best in a thread
Within one conversation, the dedup filter keeps the single best-scoring candidate and removes the rest:
22if let Some((kept_idx, best_score)) = best_per_convo.get_mut(&conversation_id) { // replace the kept post if this one scores higher, 25 // otherwise this candidate is removed 28 removed.push(candidate); }
The dedup-conversation filter keeps only the highest-scoring candidate per conversation: when a second post from the same conversation appears, the lower-scoring one is removed.
So spamming a thread doesn't multiply your reach — the feed surfaces your strongest post in that conversation, not all of them.
Signal by signal
| belief | what the code actually does |
|---|---|
| "Posting too much throttles you" | No frequency penalty exists. But author-diversity decay means extra posts compete with your own for one person's feed. |
| "Post as much as possible" | Diminishing returns: dedup and diversity cap how much of one feed you can occupy. Volume without quality is wasted. |
| "Posting too little hurts" | No inactivity penalty in the ranking code either — though fewer posts simply means fewer chances to be retrieved. |
What the code doesn't say
The exact diversity decay rate and dedup scoring — how steeply the second and third post are
dampened — live in the withheld parameters. The mechanisms are code-current; their strength is
not. There may also be anti-spam systems outside the ranking pipeline that consider volume.
The numeric values of the current weights are not included in the open-source release: weighted_scorer.rs references a params module (e.g. p::FAVORITE_WEIGHT, p::REPLY_WEIGHT) whose values are not present anywhere in the published repository.
What to do with this
Optimize per-post quality, not raw count. Since the feed won't stack your posts, every post should be able to stand on its own signals. xDoctor's timing and peak analysis helps you find when your posts actually land rather than guessing at a magic number per day.