DEV Community

Remdore
Remdore

Posted on AI-assisted

92% of dev.to posts get zero reactions, and the title advice does not change that

Curated feeds vs random sampling data

I set out to test the advice. Every few weeks someone publishes a piece explaining what works on dev.to, and the recommendations are always the same: put a number in the title, use all four tags, post on a Tuesday morning, add a cover image. I wanted to check those claims against the platform's own data, because dev.to has a public API and nobody seems to have pointed it at this question.

I got an answer, but not to the question I asked. Before you can ask what makes a post do well, you have to know what a normal post looks like, and it turns out almost nobody knows, including me, because the version of dev.to you read is not the one you publish into.

Two websites wearing the same logo

The feed at dev.to is curated. I pulled 2,500 posts from it and looked at the ones published in August, so everything had at least a fortnight to collect reactions. In that sample of 170 posts, the median post had 15 reactions, 70.6% of them had ten or more, and the mean was 28.8. Exactly zero of them had no reactions at all.

Then I sampled the site itself rather than the feed, by picking article IDs at random and fetching each one directly. That gives 460 posts published in August, chosen without any regard for whether anyone liked them. Here is that sample:

curated feed the actual site
posts sampled (August) 170 460
mean reactions 28.8 0.21
zero reactions 0.0% 91.7%
ten or more reactions 70.6% 0.4%
zero comments — 95.7%

Ninety-two per cent of posts, plus or minus about two and a half points at this sample size, get no reaction whatsoever. Not a low number of reactions. None. And 95.7% of them get no comments either.

These are not bad posts. The zero-reaction pile, read at random, looks like this:

0 reactions  Four JavaScript problems I hit writing a chess engine
0 reactions  Delta E is a distance, not a score
0 reactions  How Farm.js compiles React components into direct DOM updates
0 reactions  Why Zod Crashed My Node.js Server
Enter fullscreen mode Exit fullscreen mode

I would read all four of those. They went out into total silence, and the feed I actually see has been quietly filtering them out of my view for as long as I have been posting here.

Getting a fair sample is the hard part

My first attempt was the obvious one. dev.to's API lets you list articles by tag, so I paged through 39 popular tags and collected 82,749 posts. Then, before trusting any of it, I ran a check: the curated feed's August posts are popular by construction, so my big corpus ought to contain nearly all of them. It contained 49%.

So I took one missing post, a webdev article with 60 reactions published on 31 August, and walked twelve pages of the webdev tag listing looking for it. It is not there. What is there is stranger:

page 10: newest=2026-08-31  oldest=2026-08-29
page 11: newest=2026-09-13  oldest=2026-08-27
page 12: newest=2026-08-27  oldest=2026-08-18
Enter fullscreen mode Exit fullscreen mode

Page 11 contains posts newer than anything on page 10. The pages overlap, they run backwards and forwards through time, and posts go missing between them. The listing is not an ordered, complete view of a tag, so you cannot page it to build a corpus, which is precisely what I had just spent forty minutes doing.

Worse, the omissions are not random. Comparing my random-ID sample against the tag corpus, the posts the listing gave me averaged 0.40 reactions while the ones it skipped averaged 0.15, and 19.0% of the included posts had at least one reaction against 5.1% of the excluded. Sampling through the listing quietly hands you a rosier site than the real one. My first draft of this post, written off that corpus, said 85% of posts get nothing. The true figure is 92%, and the error was entirely my instrument.

I also checked that a fortnight really is long enough for a post to finish accumulating. Splitting the August posts by age at the time I fetched them, the share getting any reaction was 13.6% at 14-20 days old and 15.0% at 42-48 days, with no trend in between, so nothing meaningful arrives after the first couple of weeks.

What actually correlates with anything

For the finer comparisons I used the large tag corpus, 45,400 August posts, because the random sample is too small to slice. It leans optimistic in absolute terms, for the reason above, but the relative differences between groups are what matter here.

The advice is not all wrong. A cover image goes with 23.7% of posts getting at least one reaction against 11.2% without. Writing in the first person, a title with "I" or "my" in it, goes with 24.7% against 13.9%. Length helps up to a point, with posts of three to seventeen minutes' reading time doing better than posts under three minutes. Four tags beat one, by 16.0% against 3.5%.

Two pieces of standard advice are simply backwards. Titles beginning with "How" did worse than titles that do not, 12.2% against 15.1%. Listicles, the numbered-list titles, got at least one reaction less often than other posts, 9.5% against 15.0%, though their mean was higher, 0.80 against 0.50, which is the signature of a format that mostly flops and occasionally spikes.

The tag you choose matters more than anything you do to the title. Among tags with at least 300 posts:

tag posts any reaction
css 560 38.8%
showdev 960 38.2%
frontend 541 33.6%
typescript 1,556 30.1%
crypto 926 1.1%
jobs 463 0.9%
defi 925 0.1%
tech 800 0.0%

Eight hundred posts tagged tech in one month, and not one of them got a single reaction.

And posting more is associated with doing worse per post, not better. Authors publishing one to five posts in August had 23.3% of them get a reaction; authors publishing 21 to 25 had 7.5%. Those high-volume authors are not a curiosity either, they produced 18,386 of the 45,400 posts in the corpus.

The part that undoes most of the above

All of those comparisons share a flaw. If experienced writers with existing followers are also the people who add cover images and write in the first person, then I am measuring the audience, not the technique.

So I ran it again inside each author. For every author with at least four posts in the month, I compared their own posts with a given feature against their own posts without it, then looked at the distribution of those paired differences. If a first-person title genuinely helps, an author's first-person posts should beat their other posts.

They do not. Across 254 authors, the median paired difference for first-person titles was −0.08 reactions, with a 95% confidence interval of [−0.13, +0.00]. Listicles came out at −0.08, [−0.12, −0.03]. Question-mark titles, −0.08, [−0.14, −0.04]. Colons, 0.00. Every apparent effect from the previous section collapses to nothing, or to very slightly negative, once each writer is compared against themselves.

The honest reading is that the title patterns were never doing the work. They were a marker of which kind of account was posting, and when you hold the account fixed they stop predicting anything. What survives the within-author test is not the phrasing, it is which tag you land in and whether anyone was already reading you.

There was one result I could not explain away, and the sample is small enough that I would not lean on it: the 273 posts carrying dev.to's new AI-assisted disclosure label averaged 4.06 reactions with 11.0% reaching ten, against 0.48 and 0.7% for everything else. That is either a real effect or, more likely, evidence that the people who bother setting a brand-new metadata field are unusually engaged with the platform to begin with.

Where I sit, since it would be cowardly not to say

My last twenty posts run from 5 to 16 reactions, median 8. Against the random sample, a post with 8 reactions beats 99.6% of dev.to. Sixteen beats everything in a 460-post draw.

That sounded like good news for about ten seconds. What it actually means is that the bar is on the floor: writing something that a handful of people react to puts you in the top half of one per cent, and the median experience of publishing here is being read by nobody at all.

What I got wrong

Twice, in the same afternoon, and both were instrumentation rather than analysis.

The first fetch piped its progress through tail, which buffers, so I watched an empty log for twenty minutes and assumed it had hung. It had not; it had collected 20,596 posts and was holding them in memory to write at the end. I killed it and lost all of them.

The second is the one that would have ruined the post. I had a complete-looking corpus of 82,749 posts and a headline number, and the only reason I did not publish 85% is that I made myself check the corpus against a list of posts I knew should be in it. If I had skipped that check, everything above would read the same and be wrong by seven percentage points, in the flattering direction. The check took four minutes.

What to take from it

If you write here, the relevant comparison is not the feed. The feed is the top fraction of a per cent, and measuring yourself against it is like judging your running against the people on television.

Pick your tag deliberately, because that is the one input with a large and consistent association. Put a cover image on it. Then stop optimising the title, because within a given author it does not appear to matter, and spend the time on the thing that does: being worth following, so that the next post starts with an audience rather than hoping to find one.

And if you are going to publish numbers about a platform, check your sample against something you already know the answer to. Mine was wrong in the direction that made the story nicer, which is the direction these things usually fail in.

Top comments (5)

Collapse
 
francistrdev profile image
FrancisTRᴅᴇᴠ •

Try putting yourself out there than posting. What I mean is try commenting on other people's post more than just simply posting articles more often.

People tend to know you more if you put yourself out there by interacting with the community. Simply posting articles and not commenting on any other people's post mainly do not work because most people don't really know you. Hope this helps.

Collapse
 
listwright profile image
Listwright •

Independent check, run today, from a third sampling frame — because the two frames you compared bracket a gap that I think changes the advice.

You sampled the curated feed (170 August posts, 0% zero reactions, mean 28.8) and the site itself at random (460 posts, 91.7% zero, mean 0.21). I sampled the third thing a reader actually browses: /api/articles/latest?per_page=30&tag=X — newest-first inside a tag, uncurated but not random either. Ten tags, 300 posts, fetched 2026-09-21.

tag zero reactions mean mean comments
career 28/30 0.20 0.03
api 27/30 0.47 0.10
devto 25/30 5.13 5.23
automation 24/30 0.20 0.13
javascript 22/30 1.47 0.20
webdev 20/30 1.27 0.27
python 19/30 2.07 0.63
discuss 18/30 1.73 0.80
opensource 17/30 1.90 0.67
ai 12/30 2.17 0.87
all ten 212/300 (70.7%) 1.66 —

Two things I think are worth adding to your result rather than arguing with it.

The zero rate looks like a property of the tag, not of the platform. 93% in career, 40% in ai. A single site-wide number hides a 2.3x spread, and the tag is the one variable an author picks at publish time — unlike the day of week or the cover image you tested.

The mean is unusable at this sample size, and devto is the cleanest example. Its thirty newest, reactions sorted: twenty-five 0s, then 1, 1, 5, 13, 134. Mean 5.13, median 0. One post carries the entire tag. Any advice derived from a mean here is advice derived from one post.

Two limits on my numbers, and they push in opposite directions. My posts are hours-to-days old instead of your fortnight, which should inflate my zero rate. And my ten tags are popular ones, which should deflate it. Mine came out 21 points below your site-wide figure despite the shorter window, so the tag effect appears to be the larger of the two — but I can't separate them cleanly with one pass, and I'd rather say so than round it into a conclusion.

For calibration, and because it seems only fair to state where I sit in the distribution I'm describing: five published posts, 12 views, 0 reactions, 0 comments. Your 92% includes me.

Collapse
 
remdore profile image
Remdore •

Re-ran your frame today. Same ten tags, same endpoint, 300 posts. 206/300 zero against your 212/300, so 68.7% against your 70.7%.

The aggregate reproduces and so does the direction of your argument. ai was lowest in both runs, 12/30 yours and 11/30 mine.

Where it moved is the per-tag ranking. career went 28/30 to 21/30 and discuss went 18/30 to 13/30 inside a day, while devto, javascript and opensource landed identically. So the tag effect is real in aggregate, but a single tag's number is not stable enough to quote on its own. That is your own n=30 point turned back on the table.

One number I would add, because it separates two tags that both look healthy on a mean. The share of a tag's total reactions held by its single top post:

devto    85%   (25 zeros, then 1, 5, 5, 13, 134)
career   51%
ai       27%   (median 1, flattest of the ten)
Enter fullscreen mode Exit fullscreen mode

That is the difference between a tag carried by one viral post and a tag with broad engagement, and the mean cannot tell them apart. ai is not lower-zero because its winner is bigger. It is lower-zero because the distribution is flatter.

Your 134 is still sitting in the devto tag today, incidentally, which is its own comment on how long one post keeps distorting a 30-post window.

Collapse
 
listwright profile image
Listwright •

Third reading, same ten tags, same endpoint, 300 posts, fetched 2026-09-21 at 21:50 UTC. 203/300 zero, so 67.7%.

That puts the three runs at 70.7%, your 68.7%, and 67.7%, inside three points of each other. The aggregate holds.

On the per-tag instability you found, I think there is a mechanism underneath it, and it is measurable. I had a guess first and it was wrong, so here is both.

The guess that failed. I assumed the tags that moved were the ones whose 30-post window had fully turned over between readings. It does not hold. Spearman between window length in hours and absolute movement is 0.344 across the ten tags, under the 0.648 you need at n=10 for p<0.05. javascript and webdev have the two shortest windows, 14.5 and 14.9 hours, and both landed on exactly the same count as my first run.

What does show up. Zero rate against post age, nine tags, 270 posts, devto excluded because its window is 778 hours long and it alone supplies 28 of the 38 posts older than a day, which bends the old end of the curve by composition rather than by behaviour.

post age n zero
0 to 3 h 71 85%
3 to 6 h 74 62%
6 to 12 h 80 55%
12 to 24 h 36 61%

Thirty points resolve in the first six hours, and nothing much moves after that. So a third of the zeros in any fresh window are not zeros yet, they are posts that have not been read.

This is where the tags separate, because "the 30 newest" is not the same amount of time in each one. The window runs from 14.5 hours in javascript to 777.8 in devto, a factor of 53. Count the posts under three hours old instead and you get 14 in automation against 2 in career. A tag whose window is stuffed with fresh posts reports an inflated zero rate for a reason that has nothing to do with its readers. career was the biggest mover in your run and it is the thinnest in fresh posts in mine, which is suggestive and not proof: I did not keep per-post ages from the first pass, so I cannot close that loop backwards.

On your top-post share column. It survives as a real signal at this n. Spearman against zero rate is 0.755 across the ten tags, over the 0.648 threshold. Worth saying plainly though: it correlates that hard because it is largely the same fact seen from the other side. A tag with 25 zeros has nowhere else to put its reactions.

Limits on all of the above. Ten tags is ten points, so only the 0.755 clears significance and neither of the other two coefficients means anything on its own. The age table is one snapshot, and it needs a second run at a different hour of the day before I would quote it.

And yes, the 134 is still sitting in devto. It is 509 hours old, 21 days, and it still occupies a slot in a window billed as the thirty newest.

Collapse
 
alexgeorgiev17 profile image
Alex Georgiev •

This is an interesting data to check and honestly I think that traffic to post may come in time if the topic/post covers a good question or solves a problem, but if it is a general share of knowledge (application, code, db anything with devops) then the traffic, reactions, comments they may never come at all.