Do mutual follows boost your reach on X?
Yes — as of July 13, 2026, X officially boosts the visibility of your posts to your mutuals (people you follow who follow you back). Head of Product Nikita Bier announced the change and admitted why it was needed: mutual-follow data "was missing from the algo," which suppressed friends in replies. It cuts both ways: a day later Bier said accounts that farmed follow-backs as promotion now have timelines "destroyed beyond all recognition." Notably, the open-source May 2026 release already contains machinery that computes a mutual-follow similarity score — gated behind an unpublished flag and, at that release, consumed by nothing — so the boost's weight and exact mechanism remain unverified in code.
On July 13, 2026, X's Head of Product Nikita Bier announced a ranking change: posts now get a visibility boost to your mutuals — accounts you follow that follow you back. He framed it as a small tweak. Within twenty-four hours his own follow-up made clear it was anything but: for accounts that had farmed follow-backs as a growth tactic, the same change had, in his words, destroyed their timelines. And here is what nobody else covering the story has checked: the open-source release already contains the machinery for a mutual-follow signal — shipped in May, instrumented, gated behind a flag X never published, and consumed by nothing we can find in the released code. This page takes the whole thing apart: what's officially stated, what the code actually shows, and what remains unknown.
On July 13, 2026, X Head of Product Nikita Bier announced that posts now receive a visibility boost to mutuals (accounts you follow that follow you back), stating the mutual-follow data "was missing from the algo" and that its absence made friends appear less in replies.
The admission is the story
Read the first announcement again and notice what it concedes. Bier said mutual-follow data “was missing from the algo.” That is X officially confirming that, until mid-July 2026, the live ranking system did not know who your friends were in the sense that matters most — the two-way follow relationship. Your reply section filled with strangers not because the algorithm decided strangers were better, but because it had no signal distinguishing your mutuals from anyone else. Bier's own word for the result: a battleground.
This is the rare case where a folk complaint (“I never see my friends anymore”) gets an official root cause. Users were right, and the cause was an absent signal — not a penalty, not a shadowban, not anything you did.
How we got here: the graph the rebuild left behind
The strange part is that X's ranking system used to know this. The 2023
open-source release (the Scala-era twitter/the-algorithm) shipped RealGraph:
a user-to-user graph measuring relationship strength between accounts from interaction
counts — favorites, replies, retweets, clicks — and follow, mute, and block state, with
its aggregated output exported as ranking features for timelines.
The 2023 open-source release included RealGraph, a user-to-user graph measuring relationship strength between accounts from interaction counts (favorites, replies, retweets, clicks) and follow, mute, and block state, with its aggregated interaction-graph output exported as ranking features for timelines.
The 2026 system is a ground-up rebuild around Phoenix, a Grok-based model that ranks posts by predicting engagement probabilities — the current release scores candidates across a defined set of user actions.
The current WeightedScorer combines predicted probabilities for: favorite, reply, retweet, photo expand, click, profile click, video quality view, share, share via DM, share via copied link, dwell, quote, quoted click, continuous dwell time, follow author, not interested, block author, mute author, and report.
Put those facts next to Bier's admission and a coherent story emerges — we label it as analysis, not code: the rebuild traded explicit graph structure for learned behavioral prediction. A model that ranks purely on “will this post provoke a response?” is indifferent to who responds. Outrage from strangers predicts engagement just as well as warmth from friends — often better. The battleground wasn't a bug in that system; it was the system working exactly as specified, on a specification that had forgotten the social graph. The July change re-injects graph structure into a prediction-first pipeline.
The machinery was already in the code
Here is the part you will not find in the news coverage. We inspected the pinned
May 15, 2026 open-source release — two months before the announcement — and the
mutual-follow signal is already there, built end to end. A query hydrator fetches a
compact signature (a MinHash, minimum 256 hashes) representing the viewer's follow graph.
A candidate hydrator fetches the same kind of signature for each post author and computes
the Jaccard similarity between the two — a 0-to-1 score of how much the
two follow graphs overlap — storing it on every candidate as
mutual_follow_jaccard. A dedicated side effect logs distribution metrics on
the scores. All of it is wired into the Phoenix candidate pipeline.
The May 15, 2026 release contains a complete mutual-follow similarity subsystem in home-mixer: a query hydrator fetches a MinHash signature (minimum 256 hashes) for the viewer, a candidate hydrator fetches each post author's signature and computes their Jaccard similarity into a per-candidate mutual_follow_jaccard score (0 to 1), and a side effect logs score-distribution metrics — all wired into the Phoenix candidate pipeline and all gated by EnableMutualFollowJaccardHydration, a parameter defined in the withheld params module.
Two details make this genuinely interesting rather than merely trivia. First, every
component is gated by a single switch — EnableMutualFollowJaccardHydration —
defined in the params module that X withholds from the release. The code cannot tell you
whether the switch was on. Second, at that release, the computed score goes
nowhere we can find: no scorer reads it, no filter reads it, no feature-mapping
names it. Its only named consumers are the components that set it and the side effect
that measures it.
At the May 15, 2026 release, no scorer, filter, or feature-mapping in the published home-mixer reads mutual_follow_jaccard by name: its only named consumers are the hydrators that set it and a metrics side effect that measures its distribution.
Our read — labeled as analysis: that is what an instrumentation phase looks like. Compute the signal, watch its distributions in production, act on it later. Under that reading, July 13's “rolling out” is plausibly the moment already-shipped machinery was switched on or given weight — not new code at all. The honest alternative readings: the production system may have diverged from the May release, or the value may reach the model through a wholesale serialization path the release doesn't make visible. The next open-source drop should settle it — see below.
The day after: the boost cuts both ways
On July 14, Bier posted a follow-up about user groups that had misused Following as account promotion — he named crypto specifically — following at scale with no intent to engage with or read the accounts they followed. His verdict on what the change did to them: their timelines are now “destroyed beyond all recognition.”
On July 14, 2026, Bier stated in a reply that user groups which misused Following as account promotion (naming crypto) with no intent to engage with the accounts they followed now have timelines "destroyed beyond all recognition" as a result of the mutuals change.
That sentence discloses mechanism. A reply-ranking tweak cannot destroy a timeline — if thousands of transactional mutuals are flooding an account's feed, the mutual signal is feeding timeline construction itself. And the shape of the signal in the released code explains the destruction with uncomfortable precision. The code doesn't compute “is this author my mutual” as a yes/no; it computes how much the viewer's and author's follow graphs overlap. Follow-for-follow schemes build dense cliques: every member follows every member, so members' follow graphs become nearly identical, so every member scores as maximally similar to every other. Boost by that signal and a farmed clique doesn't just see a few more mutuals — it collapses inward, every member's feed flooded by every other member. The destroyed timelines are a similarity signal doing exactly what it computes, to people who spent years maximizing it. (Labeled inference: the release shows the signal's shape; whether this exact signal drives the July change is not verifiable in code. Note also the definitional gap — Bier described direct mutuals, the code computes graph overlap; they may be two mechanisms or one described loosely.)
Notice what X did not do here: it didn't penalize follow-for-follow accounts. It gave everyone the same boost and let the shape of each account's graph deliver the verdict. An account with real mutuals got its friends back. An account built on follow-trains got the clique it constructed reflected back as its feed. The graph you built became the feed you get. As enforcement design, it's elegant — the punishment is just the reward, applied to a farmed input.
Six months of re-pricing farmed engagement
The July 14 post also isn't a one-off jab at crypto. It's the latest move in a documented six-month arc. In January 2026, Bier publicly argued that Crypto Twitter's declining reach was self-inflicted — that repetitive low-value replies and engagement farming were exhausting accounts' own distribution, not an algorithmic vendetta. Days later, X revoked API access for “InfoFi” apps that reward users for posting, citing the AI slop and reply spam they generated. The July mutuals change completes the pattern: engagement farming was re-priced in January, and now graph farming has been re-priced in July. Each time, the mechanism is the same — X stops treating a farmable signal as if it were organic, and the accounts built on the farmed version lose what the signal was worth.
For anyone modeling where ranking goes next, that arc is the tell: signals that are cheap to fabricate are being systematically discounted or made self-defeating, and signals that are expensive to fake — genuine two-way relationships, substantive replies — are being promoted. It is the platform equivalent of moving from counting votes to weighing them.
What the code does and doesn't tell us
The current pinned open-source release is the May 15, 2026 drop. Against it, here is the honest ledger.
Verifiable in code: the mutual-follow similarity machinery exists; its shape is a MinHash-estimated Jaccard overlap between viewer and author follow graphs; it is gated by a single named parameter; it is wired into the Phoenix pipeline; its output is measured; and at that release, nothing named consumes it.
Not verifiable in code:
- The flag's production value.
EnableMutualFollowJaccardHydrationlives in the withheld params module. On or off, before or after July 13 — unknown. - The weight. How large is the boost? The current scorer references all its weights through that same withheld module — anyone quoting a number for the mutuals boost is guessing.
- The set construction. The signatures are fetched from a data service; the release does not define how the underlying follow-graph sets are built — whether they cover follows, mutuals only, or something weighted.
- The mechanism identity. Whether the July change activates this Jaccard machinery, adds a direct-mutual signal alongside it, or both.
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.
X publishes algorithm updates on a roughly four-week cadence. The next release is where this resolves: if the hydrator gains a consumer — a scorer term, a model feature, a weight — the July change becomes code-verifiable, and this page will be re-verified against that drop the day it lands. Until then, the announcement itself is OFFICIAL-STATED: real, attributable, and not yet confirmed in code.
What this means for you
Your mutual graph is now ranking infrastructure — in both directions. Before July 13, a follow-back was a courtesy. Now every mutual edge is simultaneously a distribution channel for your posts and an input to your own feed. Four practical consequences:
- Broken mutuals now cost you reach, silently. When someone you follow unfollows you, you don't just lose a reader — the edge downgrades from boosted mutual to ordinary follow, and nothing notifies you. Reach decays through relationship decay you can't see.
- Junk mutuals now poison your own feed. The flip side Bier demonstrated on crypto applies at every scale: each follow-back you granted out of politeness to an account you never read is now an account the algorithm believes you want. Follow-back hygiene stopped being cosmetic on July 13.
- Follow-for-follow flipped from growth hack to self-inflicted wound overnight. The tactic's entire premise was that a follow-back was free. If the released signal's shape is any guide, follow-trains spent years maximizing the exact overlap score that now shapes their feeds — and per X's own product head, the accounts that maximized it hardest can no longer recognize their timelines.
- Mutual quality beats follower count for conversation reach. An account with 5,000 followers and 2,000 real mutuals now plausibly out-distributes one with 50,000 followers and 200 mutuals inside reply and timeline surfaces. We can't quantify it — see the ledger above — but the direction is official.
The accounts that win under this change are the ones that know the state of their mutual graph: who's a real mutual, who quietly left, which follow-backs are relationships and which are debris. Most people have no idea — the platform doesn't tell you, and as of this week, not knowing costs you twice.