← Back to blog

267k Hacker News stories: success is mostly luck

The same article submitted twice, a month apart, reaches 10 points 15% of the time either way.

Valentyn Kamyshenko9 min read

I wanted to know why one Hacker News submission makes the front page while another disappears. I downloaded 267,487 stories, then fetched the articles behind a random sample of 50,000. I measured the obvious things (title, source and author history) and some less obvious ones, including writing style and topic.

The result I trust most came from articles that were submitted twice, by different people, at least 30 days apart. A successful first submission did not improve the second one's chances. The second submission reached 10 points 15% of the time either way, exactly the base rate.

My conclusion is that the fate of any one post is mostly luck. That does not make the other effects useless. Competition, the poster's track record, the title, the writing and the topic all move the odds. Some of those effects were larger than I expected. Politics takes twice its share of the available slots. The flood of AI tool posts in 2026 shows what happens when everyone brings the same thing to a crowded room.

All the code is on GitHub: yovico-ai/hnfactors. Every number below can be reproduced with it.

The data

  • 267,487 stories posted between 1 January and 20 September 2026, from Google's public BigQuery copy of Hacker News. I dropped the last three days because their scores were still moving.
  • Article text for 38,010 stories, drawn from a random sample of 50,000. I used the Internet Archive's snapshot closest to posting time where one existed; otherwise the live page. PDFs were included, and for Ask HN posts the text on HN itself.
  • A post counts as successful if it reached 10 points. That roughly means somebody noticed it. Only 15% of stories do. The median story gets 3 points.

1. How I measured luck: the same article twice

I looked for articles that were submitted more than once: the same article in different circumstances.

22,951 URLs were submitted at least twice in 2026.

PairPairs2nd succeeds if 1st did2nd succeeds if 1st didn't
Same person reposting5,38121%8%
Two different people17,57029%16%
Two different people, 30+ days apart1,86915%15%

The last row is the one I care about. Thirty days is not a perfect boundary, but it keeps most pairs from sharing a news cycle. In that row, knowing the first result tells you nothing about the second: 15% either way.

When two submissions are close in time, their scores do resemble each other. But what they share is the moment (the news cycle, the people online), not the article.

2. The front page has a fixed number of seats

About 30 stories fit on the front page, and they rotate at a fairly steady pace. This creates a mundane constraint: HN can produce only so many winners in a week. More submissions mostly mean worse odds for each submission.

In 2026, weekly submissions rose from about 7,100 in January to 8,580 at the turn of February and March, then settled at 6,600–7,200. The success rate did the opposite: 14.8%, down to 12.3% at the peak, back to 15–16%. Across all 38 weeks, the correlation between a week's volume and its success rate is −0.61.

A quiet week appears to matter more than most of the title tricks below.

Time of day matters too. In a model that controls for the story, author, source and the number of nearby submissions, the odds of reaching 10 points peak around midday Pacific and bottom out around midnight. The difference between the fitted peak and trough is about 1.6×. This is a smooth 24-hour estimate, not evidence that one exact minute is best.

Weekends also had an advantage at the first hurdle: 17.3% of weekend posts reached 10 points, compared with 14.5% on weekdays. After adjustment, the odds were about 18% higher on weekends. But among stories that already reached 10 points, weekends had no clear advantage. I only modeled weekend versus weekday, so the analysis cannot identify a best individual day.

3. Politics takes twice its share of seats

Those fixed seats are not divided evenly among topics.

TopicShare of submissionsShare of successful stories
Politics (Trump, government, law)6.7%13.1%
Hardware and Linux4.2%6.1%
Programming languages (Rust, …)4.6%6.4%
AI coding agents6.1%3.3%

Politics wins one seat in eight while submitting one story in fifteen. Every one of those seats is a seat some kernel article, paper or Show HN didn't get.

HN's guidelines treat most political news as off-topic, and the moderators penalize flamewar-prone stories. Politics still converts at 30%, twice the site average. The penalty isn't enough to offset the attention.

I would give topics separate front-page tabs, each with its own seats. Programming, hardware, science and politics would no longer compete for exactly the same pool. An "all" page could mix the best stories from each tab. Readers would keep the serendipity of HN, but could also open a subject-specific page.

Topics can be assigned automatically. My analysis already does it from the article text, and the moderators already edit titles, so correcting a topic label would be the same kind of work. Politics is the clearest example of why separate pools matter, but it isn't the only topic that would get one.

4. 2026: the AI tools wave

Posts about AI tools (coding agents, assistants, Claude Code and similar, local models) went from 12% of all submissions in early January to 22% in early March. More than one story in five. They then settled at 17–19%.

Their success rate went the other way:

  • AI coding agent articles: 6–11% succeeded all year, about half the site average. They did worst in the months when most were posted.
  • Pages for tools to install and run: the same wave, the same low success. This topic shrank significantly over the year.

Meanwhile one topic grew in both volume and success: articles about how models actually work and are trained. Their share rose from 3.8% to 5.6%, and their success rate jumped from 7–10% in January–May to 17–19% from June onward. It is the strongest trend of the year and the only one that survives correction for testing twenty topics at once.

My reading is that HN got tired of "look at my agent" and became more interested in "here is how the model works".

The topics seemed to fall into two rough groups when I compared how often they were posted with how well they did:

  • Supply-driven topics (AI tools, tools to install, essays about programming work) do worse when there's more of them. People post because they built something, and the posts compete.
  • Event-driven topics (hardware, energy, how AI models work) do better when there's more of them. People post because something happened, and the event brings the readers too.

5. What shifts the odds

Luck dominates any single post, but over thousands of posts some things clearly matter. I compared stories that differed in one property while controlling for the others, including posting time and concurrent submissions. I used three models: whether a story reached 10 points, its score overall, and its score after it had reached 10. The table keeps only effects whose direction agreed across all three.

Effects compare the bottom sixth of stories on each property with the top sixth.

PropertyEffect on expected score
Track record of the poster and the site (earlier posts only)×1.9
First-person voice in the article ("I built…", "we found…")×1.7
Title that accurately describes the article×1.3
A number in the title×1.3
A long title×0.7

And, compared with otherwise similar stories linking to independent sites:

Link goes toEffect
Medium, Substack, WordPress and other blog platforms×0.54
Social media×0.50
Major news sites×0.65
  • Track record buys attention, but only at the start. It matters for getting off the new page and barely matters for how far a story climbs after that. How far it climbs depends on what readers find when they click.
  • "I" helps in the article, not the title. First person in the title had no effect.
  • Some things did nothing at all: question titles, hype words ("ultimate", "shocking"), colons, and images or headings in the article.
  • Code looks bad until you control for reputation. Stories with code score lower on average, because they often come from people without a track record. Compared with equally unknown posters, code helps.

6. One exception to the lottery

Posts titled "Launch HN" announce companies funded by Y Combinator, which owns Hacker News. By design, the staff place them on the front page. There were only 14 or so in my sample, but each scored about 24 times what a comparable post did.

This is documented, and it is YC's site, so I do not see it as a scandal. It is simply a useful exception to remember when looking at how random everything else is.

How much can be predicted?

Not much. Everything I measured explains about 8–9% of the variation in scores. Given one story that reached 10 points and one that didn't, my model picks the successful one 66% of the time, against 50% for a coin flip.

Timing, the first handful of voters and the other stories on the page account for some of the rest. Much of it may not be recoverable after the fact. The repost result is why I think this is more than a failure to find the right variables.

We have our own one-point example. In Formal methods can start small, we argue that formal specifications are the right way to interact with AI: people can state the intended behavior precisely, and the agent has something machine-checkable to work against. The HN submission received no comments. Maybe readers were not interested. Maybe almost nobody saw it. The data cannot tell me which story is true.

Caveats

  • Associations, not causes. Personal writing goes with higher scores; it doesn't follow that switching to "I" will raise yours.
  • Most article texts are today's versions of the pages. Archived snapshots from posting time covered only about 2,600 stories.
  • Unreachable pages are missing: paywalls, JavaScript-only sites and dead links.
  • Topics were found automatically by clustering article text with a small language model (MiniLM). Clusters are not categories; a few are mixtures.
  • Nine months, one year. The AI tools wave shows how fast this changes.

Reproduce it

I put the queries, feature extraction, models and tests in the repository. To install it with Python 3.12 and uv:

git clone https://github.com/yovico-ai/hnfactors.git
cd hnfactors
uv venv --python 3.12
source .venv/bin/activate
uv pip install -e ".[bigquery,embeddings]"

Then reproduce the main analysis:

# Download stories; the first month builds author and site histories
hnfactors fetch --source bigquery --start 2025-12-01 --end 2026-09-21 \
  --out data/stories.parquet

# Fetch article text for the same-size random sample I used
hnfactors content data/stories.parquet --out data/content.parquet \
  --sample 50000 --workers 16

# Fit the score models and analyze topic trends
hnfactors analyze data/stories.parquet --content data/content.parquet --out results
hnfactors trends data/stories.parquet --content data/content.parquet \
  --out trends --period M

Everything runs on a laptop. BigQuery's free tier covers the story download; fetching the articles takes a few hours and is resumable. The README also has an Algolia route that needs no Google account, explanations of every option, and the complete repost test.