wandres.dev
LIGHTHOUSE · La auditoría automática

La puntuación: qué significa el número y qué no

Cómo se calcula la nota a partir de las métricas, por qué no es lineal, por qué varía entre ejecuciones idénticas, y las cuatro formas de subirla sin mejorar nada.

⏱ 18 min

El número que corona un informe de auditoría es el dato de rendimiento más citado de la industria y el peor entendido. No es un porcentaje, no es lineal, no es reproducible, y no mide la experiencia de ningún usuario. Es una media ponderada de cinco métricas convertidas a escala mediante curvas construidas a partir de la distribución de sitios reales. Entender esa construcción es lo que permite usar el número sin que el número te use a ti.

🎯 Al terminar esta lección sabrás
  • Explicar cómo se convierte cada métrica en su parte de la puntuación.
  • Justificar por qué mejorar diez puntos cuesta muy distinto según dónde estés.
  • Enumerar las causas de la variabilidad entre ejecuciones idénticas.
  • Reconocer las cuatro formas de subir la nota sin mejorar la experiencia.

Cómo se construye el número

El proceso tiene tres etapas y ninguna es un porcentaje.

Etapa uno: se mide cada métrica en su unidad natural, milisegundos o una magnitud adimensional.

Etapa dos: cada métrica se convierte a una puntuación de cero a cien mediante una curva que compara ese valor con la distribución de los valores reales de un conjunto amplio de sitios. La curva no es lineal: es una distribución en la que los valores mejores que la mayoría del corpus reciben notas altas y los peores, notas bajas, con una zona intermedia donde la nota cambia deprisa.

Etapa tres: se combinan las cinco con sus pesos para dar el número final.

De esa construcción salen las tres propiedades que hay que conocer.

No es lineal. Reducir un segundo cuando estás mal apenas mueve la nota; reducir doscientos milisegundos cuando estás en la zona intermedia puede moverla mucho. La misma mejora vale cosas muy distintas según dónde estés.

Es relativa a un corpus. Tu nota depende de cómo te comparas con otros sitios, no de un ideal absoluto. Y ese corpus se actualiza: la web puede mejorar y tu nota bajar sin que tú hayas cambiado nada.

El umbral de cada banda de color es un punto de la curva, no una frontera natural. La diferencia entre ochenta y nueve y noventa es un cambio de color y una diferencia real despreciable.

⚠️
Cuidado

Perseguir el paso de una banda de color a otra es una de las formas más comunes de gastar mal el tiempo de un equipo. Los últimos puntos hasta llegar a cien son, por construcción de la curva, los más caros de todo el recorrido, y corresponden a mejoras que ningún usuario percibe. El trabajo con retorno está en la zona intermedia, exactamente donde la curva es más pendiente.

Por qué varía entre ejecuciones idénticas

Ejecutar la misma auditoría dos veces seguidas sobre la misma página da resultados distintos. Las causas son cinco y ninguna es un fallo.

Variabilidad del sistema. Otros procesos de tu máquina compiten por la CPU. Un antivirus, una sincronización, otra pestaña.

Variabilidad de red. Aunque se simule, la carga real ocurre y su tiempo entra en el modelo.

Variabilidad del servidor. Tu backend no tarda lo mismo dos veces.

No determinismo del propio navegador. El momento en que decide compilar, recolectar basura o priorizar una petición varía.

Contenido variable. Anuncios, recomendaciones, pruebas A/B, contenido personalizado: cada carga puede traer cosas distintas.

La consecuencia metodológica es que una sola ejecución no es un dato. Para comparar dos versiones hacen falta varias ejecuciones de cada una y comparar medianas. Y hay una implicación que se ignora constantemente: una diferencia de unos pocos puntos entre dos ejecuciones no significa nada. Si tu integración continua falla el build por una diferencia de tres puntos, va a fallar aleatoriamente y el equipo aprenderá a ignorarla, que es el peor resultado posible.

// Cuantifica la variabilidad de tu propio entorno antes de fijar umbrales
async function medirVariabilidad(url, repeticiones = 7) {
  const medidas = [];
  for (let i = 0; i < repeticiones; i++) {
    const marco = document.createElement('iframe');
    marco.style.cssText = 'position:absolute;left:-9999px;width:412px;height:823px';
    const t0 = performance.now();
    const cargado = new Promise(r => { marco.onload = r; });
    marco.src = url + (url.includes('?') ? '&' : '?') + 'v=' + Date.now();
    document.body.append(marco);
    await cargado;
    medidas.push(performance.now() - t0);
    marco.remove();
    await new Promise(r => setTimeout(r, 500));
  }

  const ord = medidas.slice().sort((a, b) => a - b);
  const mediana = ord[Math.floor(ord.length / 2)];
  const min = ord[0], max = ord.at(-1);
  console.table([{
    repeticiones,
    medianaMs: Math.round(mediana),
    minMs: Math.round(min),
    maxMs: Math.round(max),
    dispersion: Math.round(100 * (max - min) / mediana) + '%'
  }]);
  console.log('Cualquier umbral mas estrecho que esta dispersion producira fallos aleatorios.');
  return medidas;
}

// await medirVariabilidad(location.href, 7);

Ese porcentaje de dispersión es el dato que hay que medir antes de poner ningún umbral en integración continua. Un umbral más estrecho que el ruido de tu propio entorno no detecta regresiones: detecta ruido.

Las cuatro formas de subir la nota sin mejorar nada

Estas cuatro funcionan, se usan, y ninguna beneficia a un solo usuario. Merece la pena conocerlas para reconocerlas cuando alguien las proponga, incluido uno mismo.

Diferir todo lo diferible hasta después de la medición. La auditoría deja de observar en cierto momento; cualquier trabajo empujado más allá de ese punto no cuenta. El script pesado sigue ejecutándose y sigue costando lo mismo al usuario, solo que después de que nadie mire. La versión extrema es retrasar la carga de los scripts de terceros hasta la primera interacción, que a veces sí es una mejora real y a veces solo mueve el coste al momento en que el usuario intenta hacer algo, empeorando la respuesta.

Optimizar solo la ruta que se audita. Si todo el mundo mide la página principal, se optimiza la página principal. El resto del sitio, donde la gente pasa su tiempo, sigue igual.

Servir contenido distinto cuando se detecta la herramienta. Es detectable por su identificador de agente. Existe, se hace, y además de ser inútil es deshonesto.

Simplificar la página hasta que puntúe bien. Quitar funcionalidad no es optimizar. A veces es la decisión correcta por otros motivos, y entonces la mejora de la puntuación es una consecuencia, no el objetivo.

El criterio que distingue una optimización real de una de estas cuatro es una sola pregunta: ¿la métrica de campo también mejoró? Los datos de usuarios reales no se dejan engañar por ninguna de las cuatro, porque miden lo que le pasó a personas.

Cómo usar el número bien

Tres usos legítimos y uno ilegítimo.

Como detector de regresiones. Con umbrales holgados, ejecuciones repetidas y comparación de medianas, una caída significativa avisa de que algo se ha roto. Es su mejor uso.

Como punto de partida de una investigación. Una nota baja dice que hay algo que mirar; el informe dice dónde empezar y el panel de rendimiento dice qué pasa exactamente.

Como lenguaje común con quien no es técnico. Tiene valor de comunicación, siempre que se explique qué es y qué no.

Y el uso ilegítimo: como objetivo en sí mismo. En cuanto una métrica se convierte en objetivo, deja de medir lo que medía, porque el sistema se optimiza para la métrica y no para lo que la métrica representaba. Es un fenómeno bien conocido fuera de la ingeniería y aquí se manifiesta exactamente igual.

Un número redondo y comparable es irresistible, y esa es exactamente la razón de desconfiar de él

Merece la pena entender por qué esta herramienta ha tenido tanto impacto, porque su virtud y su problema son la misma propiedad. Antes de que existiera un número único, el rendimiento web era un tema técnico incomparable entre proyectos, imposible de explicar a quien no lo entendía, y que por tanto perdía sistemáticamente todas las discusiones de prioridad frente a cualquier funcionalidad con una fecha. Reducirlo a un número de cero a cien lo hizo comparable, citable y accionable por gente que no sabe qué es un fotograma, y eso ha mejorado la web de forma medible: mucho del trabajo de rendimiento que se hace hoy no se haría si no existiera esa cifra. Es un logro real y conviene reconocerlo antes de criticarlo. El problema es que la misma propiedad que lo hace comunicable lo hace vulnerable. Un número redondo invita a ponerlo como objetivo, y en cuanto es un objetivo aparece toda la maquinaria de optimizar el indicador en lugar de la realidad que el indicador aproxima. Aparecen las cuatro técnicas de esta lección. Aparece la reunión donde se discute si se llega a noventa antes del trimestre. Aparece el proveedor que vende una solución que sube la nota. Y lo más dañino: aparece la sustitución silenciosa del objetivo real —que los usuarios tengan una experiencia rápida— por el objetivo medible, que es una aproximación con muchos huecos. La defensa práctica es sencilla de enunciar y exige disciplina: empareja siempre el número de laboratorio con un número de campo, y toma las decisiones con el segundo. Si la nota sube y el campo no se mueve, la mejora no era real y hay que decirlo en voz alta aunque la nota quede bien en la presentación. Si el campo mejora y la nota no, la mejora era real y la nota es la que está incompleta. Esa disciplina, aplicada dos o tres veces, reeduca a un equipo entero sobre qué significa cada cosa, y es mucho más eficaz que cualquier explicación sobre curvas y pesos.