⏱️ Lectura: 13 min
El 20% de las historias que llegan a la portada de Hacker News está penalizado en algún momento del día. Lo confirma un análisis que reconstruyó el ranking de Hacker News historia por historia durante varios días consecutivos.
📑 En este artículo
- TL;DR
- Qué reveló el análisis del ranking de Hacker News
- La fórmula real detrás del ranking de Hacker News
- Cómo Hacker News reordena sin recalcular todo
- Las penalizaciones ocultas: qué las activa
- Cómo probarlo vos mismo con la API oficial de Hacker News
- Impacto y análisis: qué significa para la comunidad
- Qué sigue para el algoritmo de Hacker News
- Preguntas frecuentes
- ¿Cuál es la fórmula que usa Hacker News para el ranking?
- ¿Por qué mi historia con muchos votos no llega al primer puesto?
- ¿Qué es la penalización por controversia?
- ¿Hacker News todavía penaliza los títulos con “NSA”?
- ¿Puedo reproducir este análisis con datos propios?
- ¿Qué significa “gravedad” en este contexto?
- Referencias
La fórmula pública de puntaje se conoce desde hace años, pero quedaban preguntas abiertas. ¿El código publicado refleja el algoritmo real? ¿Hay factores invisibles además de los votos? Este artículo responde con datos concretos: la fórmula, el mecanismo de reordenamiento y las penalizaciones que Hacker News aplica sin avisar.
TL;DR
- La fórmula pública de Hacker News combina votos y antigüedad; el tiempo pesa más, así que todo puntaje cae a cero con las horas.
- Un análisis de varios días sobre el top 60 de Hacker News halló que el 20% de la portada carga alguna penalización activa.
- Los títulos con ‘NSA’ recibían una penalización automática de 0,4 puntos, según documentó el análisis original de 2013.
- Las historias ‘controvertidas’, con muchos comentarios frente a pocos votos, reciben una penalización severa pasados los 40 comentarios.
- Dominios populares como medium.com, github.com o theguardian.com llevaban penalizaciones automáticas de entre 0,25 y 0,8 puntos.
- Cada voto reordena solo esa historia; además, cada 30 segundos el sistema reevalúa al azar una del top 50 para evitar posiciones estancadas.
- El sitio cachea sus páginas 90 segundos, así que un cambio de posición no se ve al instante para todos los usuarios.
Qué reveló el análisis del ranking de Hacker News
Ken Shirriff, ingeniero conocido por sus análisis de hardware retro, aplicó el mismo método forense a un sistema mucho más cotidiano: la portada de Hacker News. Durante varios días de noviembre registró el puntaje bruto y la posición real de las 60 historias principales, cada pocos minutos. El resultado fue un gráfico que compara dos líneas: la historia con más puntaje bruto en cada momento, y la historia que Hacker News realmente mostraba en el puesto número uno. Casi nunca coinciden.
Los ejemplos que documentó son elocuentes. Getting website registration completely wrong llegó al primer puesto temprano, pero una penalización por controversia la hundió en minutos. Apple Maps tuvo el mismo destino poco después. Snapchat alcanzó la cima y luego desapareció del top 60 por completo tras una penalización severa a las 8:22 de la mañana. Why you should never use MongoDB fue una de las historias más votadas del día, pero quedó encajonada cerca del puesto 7 durante horas. Y Severing ties with the NSA arrancó con una penalización automática por su título, pero era tan popular que igual llegó al número uno, hasta que Hacker News le aplicó una penalización todavía mayor.
Para un desarrollador latinoamericano que publica en Hacker News esperando tráfico hacia su proyecto, esto cambia la lectura del fenómeno. No alcanza con sumar votos: el dominio desde el que publicás, la cantidad de comentarios que genera la discusión y hasta ciertas palabras del título pueden pesar tanto como los upvotes mismos.
La fórmula real detrás del ranking de Hacker News
El mecanismo público de puntaje combina dos variables: los votos que recibe una historia y las horas transcurridas desde que se publicó. Cuantos más votos, más sube el puntaje; cuantas más horas pasan, más baja. La clave está en que el exponente que castiga al tiempo es mayor que el que beneficia a los votos. Esa asimetría, conocida como gravedad, garantiza que ninguna historia se quede pegada en portada para siempre, sin importar cuántos upvotes junte.
El análisis original no publica el valor numérico exacto de la gravedad, pero confirma el comportamiento: una historia recién publicada con pocos votos puede subir rápido, alcanzar un pico en la primera hora o dos, y después empezar un declive lento que se acelera con el correr del tiempo. Ese patrón, sumado a que la mayoría de los votos llegan en las primeras horas, explica por qué las curvas de puntaje en el gráfico del estudio suben empinadas y bajan todavía más rápido.
Podés reproducir la forma general de la fórmula en cualquier lenguaje. Este ejemplo en JavaScript usa un valor de gravedad ilustrativo, no confirmado oficialmente, para mostrar cómo se comporta el cálculo:
function hnScore(points, submittedAt, now = Date.now(), gravity = 1.8) {
const ageInHours = (now - submittedAt) / (1000 * 60 * 60);
return (points - 1) / Math.pow(ageInHours + 2, gravity);
}
// Historia con 120 votos y 3 horas de antiguedad
const score = hnScore(120, Date.now() - 3 * 60 * 60 * 1000);
console.log(score.toFixed(2));
Con gravedad fija en 1.8 (un valor habitual en implementaciones inspiradas en Hacker News, no el oficial), una historia con 120 votos y 3 horas de antigüedad pesa mucho menos que una con la mitad de votos y apenas 20 minutos de vida. Esa es la razón por la que una historia nueva puede saltar al frente de la portada aunque tenga menos puntos totales que otra publicada horas antes.
Cómo Hacker News reordena sin recalcular todo
Sería ineficiente recalcular el puntaje de miles de historias activas cada vez que alguien visita el sitio. Hacker News resuelve esto reordenando de a una. Cuando un usuario vota una historia, el sistema recalcula el puntaje de esa historia puntual y la mueve al lugar que le corresponde en la lista; el resto de las historias no se toca.
El problema de ese atajo es que una historia puede quedarse en una posición alta si deja de recibir votos, aunque ya no lo merezca. Para evitarlo, cada 30 segundos Hacker News elige al azar una historia entre las 50 primeras y la reordena, aunque nadie la haya votado en ese momento. Además, las páginas del sitio se cachean 90 segundos, lo que significa que un cambio de posición puede tardar hasta minuto y medio en llegarle a todos los visitantes.
flowchart TD
A["Usuario vota una historia"] --> B["Se recalcula el score de esa historia"]
B --> C["La historia se reordena en la lista"]
D["Cada 30 segundos"] --> E["Se elige una historia al azar del top 50"]
E --> B
C --> F["Pagina servida desde cache"]
F --> G["Cache expira cada 90 segundos"]
Las penalizaciones ocultas: qué las activa
La fórmula de votos y tiempo es solo la mitad de la historia. Sobre ese puntaje bruto, Hacker News aplica una capa de penalizaciones que rara vez se documenta en público, y que el análisis logró aislar comparando el puntaje bruto de cada historia contra su posición real.
| Tipo de penalización | Qué la activa | Magnitud aproximada | Ejemplo real |
|---|---|---|---|
| Por palabra en el título | El título contiene “NSA” | Penalización fija de 0,4 puntos | “Severing ties with the NSA” |
| Por dominio | La historia enlaza a un sitio de alto volumen (medium.com, github.com, theguardian.com, entre otros) | Entre 0,25 y 0,8 puntos | Historias de arstechnica.com o businessinsider.com |
| Por controversia | La historia supera cerca de 40 comentarios con una proporción alta de respuestas frente a votos | Caída abrupta y sostenida de posición | “Apple Maps”, “Getting website registration completely wrong” |
| Manual u oculta | Decisión editorial o reportes de moderación no documentados públicamente | Puede sacar la historia del top 60 por completo | “Snapchat” desapareció del ranking a las 8:22 am |
No está claro si estas penalizaciones las aplica el equipo de Hacker News a mano, historia por historia, o si surgen de reglas automáticas disparadas por reportes de usuarios. El propio análisis lo deja abierto: la evidencia muestra el efecto, no quién aprieta el botón.
La penalización por controversia
De todas las penalizaciones documentadas, la de controversia es la más agresiva. Una historia que acumula muchos comentarios en relación a sus votos, típicamente señal de una discusión acalorada y no de consenso, empieza a perder posiciones apenas cruza el umbral de los 40 comentarios. Why you should never use MongoDB es el caso de manual: fue una de las historias más votadas del día, pero la penalización la mantuvo encajonada cerca del puesto 7 durante horas, lejos de donde sus votos la hubieran llevado.
Cómo probarlo vos mismo con la API oficial de Hacker News
Hacker News expone una API pública sin autenticación, respaldada por Firebase, que permite bajar el ranking en vivo y cruzarlo contra un cálculo propio del puntaje bruto. Con eso podés detectar, hoy mismo, qué historias están rindiendo por debajo de lo que sus votos sugieren.
El endpoint https://hacker-news.firebaseio.com/v0/topstories.json devuelve hasta 500 ids ordenados según el ranking real. El endpoint https://hacker-news.firebaseio.com/v0/item/{id}.json devuelve los datos de cada historia: puntos, hora de publicación y cantidad de comentarios (descendants). Con eso alcanza para reconstruir el experimento:
import requests
import time
BASE = "https://hacker-news.firebaseio.com/v0"
def hn_score(points, time_submitted, gravity=1.8):
age_hours = (time.time() - time_submitted) / 3600
return (points - 1) / (age_hours + 2) ** gravity
top_ids = requests.get(f"{BASE}/topstories.json").json()[:60]
stories = []
for rank, story_id in enumerate(top_ids, start=1):
item = requests.get(f"{BASE}/item/{story_id}.json").json()
raw = hn_score(item.get("score", 0), item.get("time", 0))
stories.append((rank, item.get("title"), item.get("score"), raw))
for rank, title, points, raw in sorted(stories, key=lambda s: -s[3])[:10]:
print(f"rank_real={rank:2d} score_bruto={raw:6.2f} votos={points:4d} {title}")
Si ordenás la salida por score_bruto y la comparás con rank_real, las historias donde el ranking real queda muy por debajo de lo que el puntaje bruto sugiere son las candidatas a estar penalizadas. Es el mismo método que usó el análisis original, adaptado a la API pública actual.
💭 Clave: Que el exponente del tiempo sea mayor al de los votos no es un detalle menor: es lo que evita que una historia viral de ayer siga bloqueando la portada de hoy. Sin esa asimetría, Hacker News se congelaría alrededor de un puñado de historias eternas.
Impacto y análisis: qué significa para la comunidad
Que un sitio con la reputación de neutralidad técnica de Hacker News aplique penalizaciones no documentadas genera una tensión real. Por un lado, sin ellas la portada quedaría dominada por sitios grandes que reciben envíos duplicados de la misma noticia por distintos usuarios, inflando votos que no reflejan mérito real. Por otro, la falta de transparencia sobre qué palabras, dominios o umbrales de comentarios activan una penalización deja a quien publica sin manera de saber, de antemano, si su historia va a competir en igualdad de condiciones.
Vale una aclaración importante: estos números salen de una observación externa de 2013, no de documentación oficial de Y Combinator. Hacker News nunca publicó la lista completa de dominios penalizados ni el valor exacto de la gravedad, y no hay garantía de que los pesos se mantengan iguales con el tiempo. El propio autor del análisis actualizó después su artículo para aclarar que la penalización automática a los títulos con “NSA” dejó de aplicarse. Es la prueba de que el sistema se ajusta en silencio, sin changelog público.
⚠️ Ojo: Ninguno de estos pesos es oficial. Si reproducís el experimento con la API pública, vas a ver el efecto de las penalizaciones, pero no una lista confirmada por Hacker News de qué las dispara ni cuánto pesan hoy.
Qué sigue para el algoritmo de Hacker News
El caso de la penalización a “NSA” muestra el patrón más probable hacia adelante: ajustes puntuales, aplicados sin aviso, que la comunidad solo detecta cuando alguien vuelve a hacer el mismo ejercicio de ingeniería inversa. Mientras tanto, la API pública sigue siendo la única ventana confiable para cualquier desarrollador que quiera entender, con datos propios, por qué una historia sube o baja.
📖 Resumen en Telegram: Ver resumen
Probalo vos: corré el script de Python contra topstories.json ahora mismo y fijate cuántas historias de la portada actual rinden por debajo de lo que su puntaje bruto sugiere.
Preguntas frecuentes
¿Cuál es la fórmula que usa Hacker News para el ranking?
Combina los votos de una historia y las horas transcurridas desde su publicación, con el tiempo pesando más que los votos. Esa asimetría, llamada gravedad, hace que el puntaje de cualquier historia tienda a cero con el correr de las horas, según documentó el análisis original.
¿Por qué mi historia con muchos votos no llega al primer puesto?
Porque el puntaje bruto no es lo único que decide la posición. Hacker News aplica penalizaciones por dominio, por controversia y, en el pasado, por ciertas palabras del título, que pueden hundir una historia aunque tenga más votos que las que están arriba.
¿Qué es la penalización por controversia?
Es la que se activa cuando una historia acumula muchos comentarios en relación a sus votos, generalmente pasados los 40 comentarios. El efecto es una caída abrupta de posición, incluso si la historia venía liderando la portada.
¿Hacker News todavía penaliza los títulos con “NSA”?
No, según la propia aclaración posterior del autor del análisis: la penalización automática a esa palabra se retiró después de que el artículo original se publicó en 2013. Sirve como ejemplo de que estos pesos cambian sin aviso público.
¿Puedo reproducir este análisis con datos propios?
Sí. La API pública de Hacker News no requiere autenticación y expone tanto el ranking real como los datos crudos de cada historia, suficientes para calcular un puntaje bruto propio y compararlo contra la posición real.
¿Qué significa “gravedad” en este contexto?
Es el nombre que recibe el exponente que aplica el tiempo dentro de la fórmula de puntaje. Cuanto mayor ese exponente en relación al de los votos, más rápido cae una historia de la portada a medida que pasan las horas.
Referencias
- How Hacker News ranking really works: el análisis original de Ken Shirriff sobre puntaje, gravedad y penalizaciones.
- HackerNews/API en GitHub: documentación oficial de la API pública que expone historias, puntajes y comentarios en tiempo real.
- Hacker News FAQ: preguntas frecuentes oficiales sobre el funcionamiento del sitio.
- Hacker News en Wikipedia: contexto histórico y editorial sobre el sitio administrado por Y Combinator.
📱 ¿Te gusta este contenido? Únete a nuestro canal de Telegram @programacion donde publicamos a diario lo más relevante de tecnología, IA y desarrollo. Resúmenes rápidos, contenido fresco todos los días.
0 Comentarios