What to test first if you want more views, read from X's public code
When you want to increase the views of a post on X, starting from the format, such as “attach a video” or “make it long so people open it,” leaves you unable to tell what worked. What to look at first is which action that post’s content produces: a share, a reply, or a click.
In the code X published for the “For You” timeline, it predicts the probability that each user takes an action such as “like,” “reply,” or “copy a link and share,” and it makes a score by multiplying a weight for each action.
Final Score = Σ (weight_i × P(action_i))
In those default values, a quality view of a video was 0.0, and copying a link to share was 20.0. From these numbers alone you cannot calculate “how many video views one share equals,” and in production an experiment setting and a later reordering also come in. The purpose of this article is not to declare a method that wins. It is to make what to try first, and which numbers decide whether to keep it.
3 things to try first
From the public code, in my own operation I test in the following order.
- Content you want to reach a new reader goes out as a normal post or a quote, not as a reply. Replies from accounts you do not follow are removed from the candidates
- Put in one piece of information that can be handed to someone. A decision condition, a reproduction procedure, a measured result with a source: make a reason to copy the link and share it
- Attach a video only when the content needs it. Do not assume “it grows because it is a video.” Compare impressions, shares, and replies with a post that made the same point as a still image or as text
This is a hypothesis built from the public code, and the effect is still unmeasured. For each post, record not only impressions but also shares, replies, post clicks, profile visits, and blog traffic, at the same point in time, and see which post was one on which a given action increased.
I am building Shoryaku AI ( https://shoryaku.net ), a marketing-support SaaS, as an indie developer, and I run X for its acquisition.
Premises when reading the public code
What I read is commit 6384ca7 of xai-org/x-algorithm, the recommendation-system repository that X has published. It is not my repository. It is code that X has published. Of home-mixer/, which assembles the For You timeline, I am looking at the weight definitions (params/param.rs) and the score composition (scorers/ranking_scorer.rs).
First, 3 constraints on using these numbers. If you skip this, you will change how you operate while having misread them.
- What is published is the default values of feature switches. The top of
param.rssays “mirrored from config feature-switch defaults,” and the actual delivery can be overwritten by an experiment - The final order is not decided by these weights alone. After the weighted sum, a separate service reorders
- The weights are applied to a predicted probability. They are not counts. A comment in the repository explicitly rejects a conversion of the form “1 report cancels out 468 likes.” The explanation is that the baseline probability of a report is 1/1000 or less of a like, so the weight is large in order that the prediction can affect the rank
Default weights by action
I pull out the main ones.
| Action | Default weight |
|---|---|
| Copy a link and share | 20.0 |
| Reply | 5.0 (+15.0 for an original post by a mutual follow) |
| Quote / share by DM | 5.0 each |
| Follow the author | 4.0 |
| Share (other) | 2.0 |
| Repost | 1.0 |
| Like | 0.5 |
| Post click (open, read more) | 0.4 |
| Link click | 0.2 |
| Open a video | 0.07 |
| Expand an image / dwell | 0.05 each |
| Quality view of a video | 0.0 |
| Profile click | 0.0 |
| Report / mute / not interested / block | −234.0 / −58.8 / −43.2 / −31.2 |
After the score, there is an adjustment that decays the second and later posts by the same author (0.5 times each, with a floor of 0.25), and an adjustment that multiplies posts from outside the people you follow by 0.75. On the filter side, posts older than 48 hours, and replies and reposts from accounts outside the people you follow, drop out of the candidates.
How to move the numbers into the design of a post
The basis for prioritizing video alone is weak. The weight of a quality view is 0.0, and opening a video is 0.07. Those values were smaller than a like’s 0.5. An operation of “it grows if you attach a video” cannot be supported by the published default values alone, at least.
The tap was only half on target. A post click is 0.4, which comes close to a like’s 0.5. Making it long so that people open it is indeed a source of score. A mechanism is implemented, though, that decays the case where there was no reaction after the open (a coefficient that discounts dwell after a click by the like rate, and a negative weight for not having dwelled). Some of them are disabled in the defaults, but the fact remains that a device in that direction has been prepared.
The default value of a profile click was 0.0. That is a fact limited to this range: it is not a direct addition in the weighted sum of this Home Mixer. Whether a profile visit affects another model, or a later delivery, cannot be known from these 2 files. For the business I will keep measuring it, but I will not explain why a post was shown from this value alone.
What to test first is the share and the conversation. Copying a link to share is 20.0, and a reply, a quote, and a DM share are 5.0. The priority rose for trying a form that someone can later hand to someone else, ahead of aiming only at the tap. Because the weight is applied to the predicted probability of the action, the size of the value cannot be replaced, as it is, with the actual number of times it occurs.
What changed
I reflected what I read into the X-operation skill under docs/skills/ (commit 2ccc25f). The differences in the operating rules are as follows.
| Before | After |
|---|---|
| Consider a video or a long post as a “format that grows” | Attach a video only when the content needs it. Do not write in a way that hides the conclusion at the start in order to make people open it |
| Think that a reply also reaches a new reader | In the default filter of the Home Mixer that was investigated, a reply from outside the people you follow is outside the candidates. Compare posts aimed at new readers as a normal post or a quote |
| Increase exposure by posting a thread in a row | Do not assume that the number of slots increases, because there is processing that folds a conversation. Keep one point per post |
| Treat a profile visit as a main result | Measure it as a business KPI, but do not use it in the explanation of “why it grew” |
| Aim for a reaction on each post | Put in one form that will be referred to later (a set of a decision condition, a procedure, and a measured value). Do not write “please save this” |
The policy of putting the body of a long piece on our own blog has not changed. In the default filter of the Home Mixer that was investigated, a post older than 48 hours is outside the candidates, so content that will keep being referred to is updated on our own blog. I do not assert that every display surface on all of X excludes posts at 48 hours.
The rules were left as things not to place into the premise before a test, not as a guarantee that “write it this way and it grows.”
The effect has not been measured yet. The account had just been opened, and there are no posts that can be compared. The changes above are in the operating file as hypotheses based on the specification, and whether to adopt or reject them will be decided when a result is attached to each post. The possibility that it does not move as the specification says remains, as in premises 1 and 2.
The order of tests for increasing views
- Because a reply from outside the people you follow was outside the candidates in the Home Mixer that was investigated, split the results for new readers across a normal post, a quote, and a reply, and compare them
- Include information that gives a third party a reason to share it, such as a decision condition, a procedure, or a measurement
- Do not prioritize a video by the format alone. On a post where the content needs it, compare it with a text version
- The published values are not the confirmed rules of production. Decide whether to keep a change from the results for impressions, shares, replies, and blog traffic
- Because a weight is applied to a predicted probability, do not read 20.0 or 0.0 as an equal exchange of action counts