Viral Show HN Posts

Hacker News
Analysis
Author

Kian Ghodoussi

Published

November 21, 2025

Macroeconomics, DIY Hardware and AI-Driven Voting Pools: the State of the Show HN Ecosystem.

I downloaded every Show HN post since the site was launched and ran them through a hierarchical topic model. I set out to discover what the Hacker News community finds interesting but in the process I ended up uncovering macro-economic trends, evidence of voting rings/fraud, and subtle shifts in behavior over the lifespan of the post

What Does Hacker News Like?

Figure 1: Treemap visualization of every Show HN posts. Grouped first by year, then by high level topic group, then by granular topic. Each box is colored by the likelihood of its category to receive over 100 points. Dark is higher likelihood, lighter is lower likelihood.
Reproducible Code
# pip install sturdy-stats-sdk plotly
from sturdystats import Index
from plotly import express as px
index = Index(id="index_f2ffe2f7901845c59c15aab45685fa3c")

df = index.queryMeta("""
WITH t AS (
    SELECT 
        UNNEST(sum_topic_counts_vals) as topic_vals,
        UNNEST(sum_topic_counts_inds) - 1 as topic_id, -- duckdb is 1 indexed
        year(published::DATE) as year,
        score
    FROM doc
)
SELECT 
    topic_id,
    year,
    count(*) as n_posts,
    avg(score) as avg_score,
    avg((score > 10)::int) as p10,
    avg((score > 100)::int) as p100,
FROM t
WHERE topic_vals > 5
GROUP BY topic_id, year
ORDER BY topic_id, year
""", paginate=True)

tmp = index.topicSearch(limit=500).set_index("topic_id").to_dict()
df["topic"] = (df.topic_id).apply(tmp["short_title"].get)
df["topic_group"] = (df.topic_id).apply(tmp["topic_group_short_title"].get)
df = df.dropna().copy()
df.sample(5)

## Add a prior to require a higher standard of evidence 
df["P(score>100)"] = df.apply(lambda x: (x["p100"]*x["n_posts"]+ 2)/ (x["n_posts"]+50), axis=1)

df["title"] = "Show HN<br>Performance"
fig = px.treemap(df, path=["title", "year", "topic_group", "topic"], 
            values="n_posts", color_continuous_scale="greens",
            color="P(score>100)", height=600,  )

If a picture is a thousand words, I like to think this interactive treemap is at least one thousand and one. You can click into a box to dig into the year or topic group. The first thing that jumps out is just how much bigger the 2025 box is than any other year. The second is how much lighter the 2025 box is compared to the previous few years.

I enjoy history, but I am often told that people care much more about what is happening now. So let’s dig into specifically 2025.

These are the top performing topics in 2025:

topic P(score>100)
DIY Hardware IoT Projects 0.0939227
Open Source Projects 0.0879849
Error Handling and Debugging 0.0786517
Programming Language Interpreters 0.077095
Life Narratives 0.0675676

Again, what sticks out to me is the discrepency between the average 2025 post’s average performance compared to the previous few years. The top performing topic in 2025 has the same likelihood of receiving 100 points as the average post in 2022. That’s a discrepency that I want to dig a bit deeper into.

Performance Across Years

Cumulative sum of likilihood a post received <= N points, stratified by year. You can see that there are three distinct groups. a post in 2025 has the lowest likelihood with a 11% chance of receiving more than 10 points, while 2022 posts have the same likelihood to receive 60 points.
Reproducible Code
# pip install sturdy-stats-sdk seaborn 
from sturdystats import Index
import seaborn as sns
from matplotlib import pyplot as plt

index = Index(id="index_f2ffe2f7901845c59c15aab45685fa3c")
df = index.queryMeta("""
    SELECT year(timestamp::TIMESTAMP) as year, 
    score FROM doc 
    ORDER BY doc_id""", 
paginate=True)

plt.figure(figsize=(10, 6))
Xmax = 100
tmpdf = df.loc[df.year > 2020].copy().sort_values("year")
tmpdf["year"] = tmpdf.year.astype(str)
tmpdf["score"] = tmpdf.score.apply(lambda x: min(x, Xmax))
sns.displot(tmpdf, x="score", kind="ecdf", hue="year" )
plt.title('Score Distribution by Year (CDF)', fontsize=14, fontweight='bold')
plt.xlabel('Score', fontsize=12)
plt.ylabel('Density', fontsize=12)
plt.tight_layout()
plt.xlim([10, Xmax])
plt.ylim([.75, 1.0])
plt.show()

There are three distinct groups: 2022 as the heyday of Show HN posts, 2021, 2023, & 2024 as still extremely highly performing, and 2025 with a significant performance reduction. If I were to make a guess at the root cause of this difference, I would have two (not necessarily contradictory) theories.

The first is tied to the software job market. I can easily imagine that the combination of remote work and post-covid tech boom drove much more overall Hacker News engagement and more interesting Show HN projects. The job market and remote work receded a little in ’23 and ’24 but morale seems to have cratered in 2025. Which leads to my second theory.

AI has driven much more content, by both aiding in its creation and creating a cohort of startups and companies chasing a piece of the pie. This AI-driven content tends to be more shallow, and its noise makes it harder to discover genuine, interesting content. There is some evidence for this theory in the expontential growth in the quantity of hacker news posts from 2022 onwards.

These are both guesses. I don’t have an easy avenue to dig into the economic theory, but I do want to dig a bit deeper into the composition of posts in 2025.

Digging into 2025

The first thing I want to dig into is the change in topics of viral posts. Take a look at this slope plot, which shows the change in content of all posts between 2024 and 2025. Each side of the plot lists topics by rank, and a line connects their 2024 position to their 2025 position; topics which decreased in prominence have negative slopes, shown in red. Topics which surged in prominence have positive slopes, shown in blue.


You can see a spike in topics related to AI such as “Agent Connectivity”, “AI Coding”, & “AI Automation”, which lends credence to at least my theory that AI related posts grew more common in Show HNs. However, I’m curious to dig into not just how often topics were posted in 2025, but how successful each topic was.


This plot shows that, outside of the “AI Automation” topic, which saw slightly higher represented in viral posts than it’s overall prevalence, AI related Show HN posts underperform expectations. The majority of the bottom right “quadrant of death” is AI related topics. Topics such as “AI Coding” and “AI Image Generation” see noticable drops as well. It is interesting to me that “Document Ingestion and Retrieval” strongly overperforms expectations as a tool that supports a lot of these other AI topics (something about selling pick-axes?). But standing above all, the deep blue line shooting like Superman across the sky is DIY Hardware IoT Projects. I confess that I am a sucker for these posts, as it appears all of Hacker News is as well. These tends to be extremely authentic, lack any sort of commercial viability and just have a lot of soul put into them.

The last thing I wanted to dig into is the audience segmentation aspect of Hacker News. There’s two distinct audiences viewing posts. The first is the much more hardcore technical readers that view the “New” and “Show” pages. The second is the more mass market crowd that goes on the front page.


So some takeaways I have is:

  1. The real heavy-lifting for the performance of “DIY Hardware” projects is really coming from the first wave of Hacker News readers (though it does get a sizeable boost from the front page audience as well).

  2. Nearly every AI related topic does worse once it clears the 10 point threshold than any other category. This means that either the people looking through the New and Show sections are disporportionately interested in AI. This is very possible, but from my interaction with this crowd from my posts, these users tend to be more technically minded (think DIY hardware, rather than landing-page builders).

    However, my Spidey-sense is going off a little bit. AI has received a massive wave of funding for startups and enterprises have carved out budget space to invest in solutions. This is obviously not hard evidence, but circumstantially, it looks like there is a evidence that some level of voting rings are on within this AI posts.

    However, either explanation would explain why 2025 is such a challenging year for viral Show HN posts. There exists this set of topics that are more frequent than ever, that quickly garner early points, but do not resonate with the broader audience. Beyond that is speculation on my part.

What’s the best time to post?

Ah the question you really wanted to know. This was actually the first question I asked as well. I did a simple SQL query estimate. However, Mike McCourt saw a chance to apply a Gelman-style hierarchical mixed-effects model to better leverage the data to answer this question. I won’t spoil his analysis but I’ll leave you with a little preview …

HN Heatmap