Un verificador de enlaces bloqueó nuestro lanzamiento: un análisis post-mortem hipotético
Equipo inventado, incidente inventado, mecánica real. Lo narramos en el orden en que lo escribiría un ingeniero de guardia.
Equipo de investigación de Contentin ·
Este es un ejemplo
El equipo, el producto y los tiempos que se detallan a continuación son ficticios y sirven para mostrar cómo se desarrolla un fallo. No se describe ninguna empresa, cliente o medición reales.
El incidente, en orden cronológico
1
09:10, una página de lanzamiento entra en el CMS
Un equipo de producto de seis personas gestiona un sitio de marketing sobre un CMS headless y una compilación estática. Un editor prepara un anuncio de asociación que enlaza a un dominio de socio registrado la semana anterior.
2
09:14, el editor pulsa publicar
El webhook de publicación llama a una función. La función ejecuta una llamada al verificador de enlaces contra el dominio del socio y está escrita para bloquear el lanzamiento ante cualquier respuesta que no sea de éxito.
3
09:14, la compilación nunca se inicia
Fallan dos cosas a la vez. El dominio es muy nuevo, por lo que nuestro índice puede que aún no lo conozca. Además, el saldo prepagado de la clave del equipo estaba vacío, por lo que la llamada de seguimiento pagada devolvió un HTTP 402.
4
09:40, el equipo lo detecta
El editor informa de un error vago. Un ingeniero lee el registro de la función, ve el 402 y el resultado vacío, y tarda veinte minutos en averiguar cuál de los dos causó el bloqueo.
5
10:05, el lanzamiento se publica manualmente
Alguien salta el webhook con un despliegue manual. El lanzamiento se retrasa 55 minutos y el salto manual no deja constancia de qué comprobaciones se omitieron.
Qué comprobó el equipo antes del lanzamiento
Muy poco, como resultó. La lista de pruebas solo incluía dominios conocidos, por eso la laguna permaneció oculta hasta que llegó un enlace de socio. Una prueba en un sitio famoso demuestra que la infraestructura funciona, pero no dice nada sobre un dominio que el índice aún no ha visto.
Mejores listas de pruebas deben contener tres tipos de dominio: uno consolidado, uno de nicho pequeño y un dominio registrado recientemente. Ejecuta los tres a través del webhook antes de que alguien confíe en él.
¿Qué dominios cubrió la prueba?
Solo los fáciles. Todos los dominios de la lista tenían años de historial detrás, por lo que todas las respuestas fueron completas y nadie vio qué hace una respuesta vacía en un lanzamiento.
Añade un dominio que sea genuinamente nuevo y lee su resultado manualmente. Si la nota dice «incorrecto» donde debería decir «desconocido», la regla necesita reescribirse antes del lanzamiento.
¿Qué omitió la ejecución en staging?
La ejecución en staging utilizó una clave con un saldo saludable, por lo que la ruta de saldo vacío nunca se ejecutó. Nadie había escrito una prueba que gastara el crédito a propósito.
Mantén esa ruta bajo prueba. Fuerza un 402 una vez al trimestre y lee lo que ve el editor después, porque una ruta de fallo que nadie ejecuta es una ruta que nadie puede confiar.
Por qué ocurrió
La barrera trataba cualquier respuesta no exitosa como un veredicto. Esa fue la causa raíz. Un problema de saldo y un dominio desconocido son hechos sobre la herramienta y el índice, y ninguno dice nada sobre la página.
Nuestro gráfico se reconstruye aproximadamente una vez al mes. Un dominio registrado después de la última actualización puede parecer vacío, y un socio nuevo es el caso normal para una página de lanzamiento. Nadie lo había comprobado. El equipo había probado el webhook solo con dominios antiguos y conocidos como nytimes.com.
La segunda omisión fue el silencio. La función registró el error pero no envió ninguna alerta, y el editor vio un mensaje de fallo genérico sin ninguna pista de que el crédito se hubiera agotado.
El coste nunca fue el problema. A 2 créditos por llamada, todo el mes de comprobaciones para este sitio inventado ascendió a unos 0,60 $, la misma cifra que la fila de 3.000 publicaciones en la tabla de costes. La barrera era barata y aún así les costó una hora en 2026.
El 402 merece su propia línea. Un saldo prepagado es un estado que puedes vigilar, por lo que una alarma simple a 10.000 créditos, que son 1 $, se habría activado días antes.
Puntos de acción que escribió el equipo
Los responsables son roles, no personas. Todos los puntos forman parte del ejemplo.
Cambio
Responsable
Por qué
Tratar el 402 como un salto más una alerta al canal de la plataforma
Plataforma
El crédito es un estado de facturación, no un estado de página
Tratar un resultado vacío para un dominio nuevo como desconocido, no como incorrecto
Plataforma
El índice tiene un retraso de aproximadamente un mes
Mostrar al editor la razón en palabras claras
Herramientas editoriales
20 minutos perdidos leyendo registros
Registrar las comprobaciones omitidas en la entrada
Plataforma
Los despliegues manuales no dejaron rastro
Probar el webhook con un dominio registrado esta semana
QA
Los dominios antiguos ocultan la laguna
Un ensayo para la semana de lanzamiento
Ejecuta esto antes del próximo lanzamiento, no después del próximo fallo.
1
Elegir un dominio que nadie haya comprobado
Elige un dominio registrado recientemente y llama a la acción de vista previa gratuita sobre él. Confirma que una respuesta escasa se registre como desconocida en lugar de como un bloqueo.
2
Agotar un saldo de prueba
Utiliza una clave de prueba con un saldo pequeño y déjala llegar a cero a propósito. Observa cómo llega el 402, se dispara la alerta y la publicación continúa hasta la compilación.
3
Leer en voz alta el mensaje del editor
Pide a un colega que no haya visto el webhook que lea el texto del error. Si no puede decir qué hacer a continuación, reescribe el mensaje antes del lanzamiento.
4
Escribir el salto en la entrada
Confirmar que una comprobación omitida deja una nota fechada en la entrada, con la razón. Un despliegue manual entonces nunca dejará una laguna que nadie pueda explicar.
Cómo se escribió la solución
El equipo dividió un fallo genérico en tres, porque cada respuesta tiene un responsable diferente. Un 401 es un problema de clave, un 402 es un estado de facturación y un resultado vacío para un dominio nuevo es simplemente desconocido. Cada uno tiene su propia rama y su propio mensaje. Ese es todo el cambio.
Nadie necesitaba leer una traza de pila para saber cuál ocurrió. El nombre de la alerta indica el estado, y el editor ve una frase que dice qué hacer a continuación.
¿Por qué se configura una alarma de saldo muy por encima de cero?
Diez mil créditos son 1 $ al precio publicado, una cantidad pequeña que aún da mucho aviso cuando llega antes de tiempo. Configura la alarma donde un humano la verá, no en un registro que nadie abre un viernes.
Una comprobación que falla ruidosamente una vez al día supera a una silenciosa que falla durante un lanzamiento.
Acuerda el número con el equipo y escríbelo en el mismo lugar que la regla para rotar claves, para que ambas se revisen juntas.
¿Debería un dominio nuevo contarse como un fallo?
No. Un dominio que el índice aún no ha visto es un hecho sobre el índice, no sobre la página. Guárdalo como desconocido con la fecha, y permite que un editor decida si esperar a la próxima actualización.
La misma regla se aplica a cualquier respuesta escasa. Trátala como datos faltantes, y nunca como un veredicto sobre el socio.
Registra las respuestas desconocidas en su propia lista, para que un patrón de ellas sea visible en la próxima revisión en lugar de estar enterrado en el registro general.
Qué extrapolar
Fallo abierto en los datos de enlace, fallo ruidoso en la alerta
Una comprobación de enlace nunca debería ser lo único que separa a un editor de un lanzamiento. Deja pasar la página, etiqueta la entrada y haz que el fallo sea imposible de pasar por alto para la persona responsable de la clave.
Diferencia en el código entre 401, 402 y un resultado vacío
Mantén una alarma de saldo bien por encima de cero (consulta la tabla de costes)
Ensaya el fallo en staging antes del día del lanzamiento
Preguntas que hizo el equipo después
La reunión de revisión planteó el mismo puñado de preguntas en cada versión de esta historia. Aquí está cómo las respondió el equipo inventado, y por qué esas respuestas variarían de una organización a otra.
Ninguna de estas respuestas es universal, y cada una depende de para qué sea la página. El punto es tener una respuesta en papel antes del próximo lanzamiento.
¿Debería la barrera haber fallado de forma segura?
Para este equipo inventado, no. Una comprobación de enlace es una señal basada en un índice mensual, y no debería ser lo único que separa a un editor de un lanzamiento.
Escribe la política en una sola frase, para que el próximo ingeniero pueda distinguir un bloqueo intencionado de un error.
¿Un saldo mayor lo habría prevenido?
Habría retrasado el problema en lugar de solucionar el diseño. Un saldo mayor también puede agotarse, y una barrera que trate cualquier respuesta no exitosa como un veredicto seguirá bloqueando en el primer dominio desconocido.
La solución es la división en tres respuestas, más una alarma que se active antes. El saldo es solo una parte de la historia.
Haz la misma pregunta a cualquier barrera que construyas: ¿qué fallo sería silencioso, y quién lo notaría primero?
Una nota sobre lo hipotético
Los equipos reales diferirán. El tuyo puede fallar de forma segura por buenas razones, como un sitio regulado donde cada enlace saliente es revisado por una persona. Bien. Solo asegúrate de que sea una elección.
El manual de ejecución del webhook enumera las mismas decisiones como una lista de verificación, y la lista de mitos cubre las creencias que llevaron a este equipo inventado a la trampa.