Why does posting more not give me more reach?
Because two adjustments in the live code make your posts compete — with the wider network, and with each other. Posts shown to people who don't follow you are multiplied down by an out-of-network factor, so escaping your follower bubble means clearing a structural handicap. And within any single feed build, an author-diversity pass sorts your candidate posts best-first and decays each additional one toward a floor — so on a given refresh only your strongest post gets full value. Posting more does not multiply your reach; it divides attention across posts that are throttling one another.
"Post more to grow" is the most common advice on the platform, and the live code complicates it in two specific, measurable ways. Neither is a penalty. Both are scoring adjustments that sit right after the weighted scorer, and both shape how far a post travels.
Out of network, you start behind
Every candidate post is tagged as in-network (the viewer follows you) or out-of-network (they don't). A dedicated scorer multiplies the out-of-network ones down, with a comment stating the intent in one line:
7// Prioritize in-network candidates over out-of-network candidates 20let updated_score = c.score.map(|base_score| match c.in_network { 21 Some(false) => base_score * p::OON_WEIGHT_FACTOR, 22 _ => base_score, 23});
Out-of-network candidates have their score multiplied by an OON_WEIGHT_FACTOR, with the code comment stating the intent: 'Prioritize in-network candidates over out-of-network candidates.' The factor's value is in the withheld params module.
Reaching your own followers is the easy case; the model is built to favor it. Reaching beyond them — the thing people mean by "going viral" — means your post's score is multiplied by a factor designed to hold out-of-network content back. You can still break out, but you break out against a headwind, which is why a post that does fine with your audience can still fail to travel.
Your posts compete with each other
The second adjustment is the one that directly answers "why doesn't posting more help." Within a single feed response, an author-diversity scorer sorts all candidates best-first, then walks them and multiplies each additional post from the same author down by a geometric decay toward a floor:
29fn multiplier(&self, position: usize) -> f64 { 30 (1.0 - self.floor) * self.decay_factor.powf(position as f64) + self.floor 31}
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.
Read position as "how many of your posts already came before this one in this
feed build." Your best post sits at position zero and takes the full multiplier. Your second
post is decayed once, your third twice, each toward the floor. The feed is being diversified so a
single author can't dominate one viewer's timeline — which means flooding the zone doesn't stack
reach, it spreads a fixed budget thinner across posts that are damping each other.
Signal by signal
| in the code | in plain english | where xDoctor surfaces it |
|---|---|---|
| OON_WEIGHT_FACTOR on out-of-network | Breaking past your followers is a structural climb, not a default. Posts earn their way out of network. | Coach · Reach profile |
| author-diversity decay by position | Only your top post per feed gets full value. The second and third are damped — quantity divides, it doesn't multiply. | Coach · Cadence |
| sorted best-first before decay | The decay falls on your weaker posts, not your best — so one strong post beats three average ones. | Coach · Peak posts |
What the code doesn't say
How steep either effect is. OON_WEIGHT_FACTOR, AUTHOR_DIVERSITY_DECAY,
and AUTHOR_DIVERSITY_FLOOR all resolve to the withheld params module,
so we can tell you the out-of-network handicap and the per-post decay exist and how they're
shaped, but not how punishing they are. "Never post more than N times a day" is not a number this
code provides — the mechanism is real, the threshold is invention.
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
Concentrate, don't flood. Because your posts are sorted best-first and only the leader keeps full value per feed, one strong post outperforms three mediocre ones competing against each other. And because out-of-network reach is a climb, the posts worth spending your daily attention on are the ones with a real chance of earning the engagement that overcomes the handicap — which is exactly what xDoctor's peak detection and reach diagnostics are built to find in your own history. The scoring formula sets the value of a post; this page is about how that value survives contact with the rest of your timeline.