2 puntos por GN⁺ 2025-05-01 | 1 comentarios | Compartir por WhatsApp
  • Un bug en la actualización automática de Screen Studio, una app de grabación de pantalla para macOS, provocó que un archivo de 250 MB se descargara repetidamente cada 5 minutos
  • Como resultado, durante un mes se generaron 2 PB (2,000,000 GB) de tráfico en Google Cloud, lo que terminó en una factura de alrededor de $8,000
  • La causa fue una simple omisión de código: faltó la lógica para detener las solicitudes repetidas después de descargar la actualización
  • Algunos usuarios incluso sufrieron daños reales, como la cancelación de su servicio de internet, y el equipo de desarrollo asumió plenamente la responsabilidad
  • Se enfatizan lecciones como configurar alertas de costos en la nube, revisar el código que puede generar gastos y preparar mecanismos de control para el servidor de actualizaciones

Resumen del incidente

  • Screen Studio es una app de escritorio para grabar pantalla en macOS y cuenta con función de actualización automática
  • El archivo de actualización pesa unos 250 MB y la app consulta el servidor cada 5 minutos
  • Debido al bug, incluso después de detectar la actualización, las solicitudes cada 5 minutos no se detenían y el archivo seguía descargándose

El inicio de un refactor trágico

  • Antes, la ventana emergente de actualización interrumpía la grabación y eso causaba un problema de UX
  • Durante un refactor para mejorar eso, se eliminó la lógica que detenía el temporizador después de la actualización
  • Como resultado, la app terminó con una lógica integrada que hacía que el archivo de actualización se descargara una y otra vez

El contexto aterrador: ejecución en segundo plano

  • Una parte importante de los usuarios tenía la app ejecutándose en segundo plano durante varias semanas
  • En ese estado, miles de instancias descargaban automáticamente 250 MB cada 5 minutos

El desastre en números

  • Descargar cada 5 minutos = 288 veces al día
  • Tráfico diario descargado por usuario = 72 GB
  • Si esto se mantuvo por unos 30 días y se asumen 1,000 usuarios:
    • 250 MB × 288 × 30 × 1,000 = cerca de 2 PB de tráfico
  • Costo estimado generado en Google Cloud: alrededor de $8,000

Errores en cadena

  • No estaban configuradas las alertas de costos de Google Cloud
  • Había una falsa sensación de tranquilidad porque la factura mensual habitual rondaba los $300
  • Al final, se detectó el problema cuando la transacción fue bloqueada por exceder el límite de la tarjeta de crédito

Impacto en los usuarios

  • Un usuario recibió un aviso de cancelación de contrato por parte de su ISP (proveedor de internet) debido a este tráfico
  • En esa zona no había proveedor alternativo → una afectación seria para su vida diaria
  • El equipo reconoció su responsabilidad y ofreció compensar los costos; por suerte, la situación se resolvió de buena manera
  • Aun así, la experiencia de haber perjudicado a un usuario dejó una reflexión profunda en el desarrollador

Resumen de lecciones

  • Las alertas de costos en la nube son indispensables
  • La lógica de actualización automática debe escribirse con muchísimo cuidado
  • Todo código que pueda generar costos debe revisarse de forma especial
  • Hay que incluir señales de control del servidor (por ejemplo, una bandera de actualización forzada) en el diseño
  • El uso de la nube debe revisarse periódicamente

1 comentarios

 
GN⁺ 2025-05-01
Comentarios de Hacker News
  • Para quienes encuentren este hilo en el futuro a través de una búsqueda web: screen.studio es un software de grabación de pantalla para macOS que busca actualizaciones cada 5 minutos. Pero el bug descrito en esta publicación consiste en que descarga un archivo de actualización de 250 MB cada 5 minutos

    • Los desarrolladores consideran todo esto normal, pero las descargas reales generaron $8000 en cargos por ancho de banda
    • Resumen: el software de grabación de pantalla busca actualizaciones cada 5 minutos. Eso son 12 veces por hora
    • Yo elijo software según el nivel de confianza que me inspira el criterio del desarrollador. Vale la pena preguntarse si este criterio es razonable
  • Screen Studio es un grabador de pantalla para macOS. Es una aplicación de escritorio. Afirman que necesita autoactualización para poder instalar fácilmente la versión más reciente

    • Pero la autoactualización provoca varias consecuencias negativas
    • Descarga actualizaciones sin el consentimiento del usuario, generando tráfico en el cliente
    • La descarga se repite continuamente cada 5 minutos. Me pregunto si siquiera detectaron si el usuario está en una conexión medida
    • Hay un bug donde la ventana emergente de actualización interrumpe el flujo de trabajo
    • El pop-up en sí ofrece una mala experiencia al usuario. Sería mejor permitirlo al cerrar la app y manejar el resto en segundo plano
    • Algunos usuarios vigilan con atención las conexiones salientes de sus apps, y revisar actualizaciones cada 5 minutos es excesivo. No hace falta hacerlo mientras la app está en uso. Sería mejor revisar al inicio y preguntar al salir
    • Toda la complejidad adicional de la app que causó todos los problemas anteriores. Le genera costos al desarrollador
    • La App Store podría ser una forma perfecta de gestionar las actualizaciones en este caso
  • Es ridículo que el desarrollador de una app no esencial como un grabador de pantalla piense que debe buscar actualizaciones cada 5 minutos

    • Una vez al día sería más que suficiente
  • De verdad me pregunto si hace falta revisar actualizaciones cada 5 minutos. Una vez al inicio basta, y si el usuario la deja abierta durante días, podría revisarse una vez al día o incluso con menos frecuencia

  • Siempre soy estricto con las revisiones de código. Una vez, cuando un gerente me dijo que dejáramos más cosas a QA, respondí: "Todos podríamos perder el trabajo. Siempre podemos perderlo por una sola línea de código mala"

    • A menudo desarrolladores junior o incluso experimentados escriben cosas que pueden provocar una filtración potencial de PII. En la mayoría de los sistemas, eso puede derivar en problemas legales muy graves
  • El problema del ancho de banda consumido innecesariamente por miles de usuarios en sus planes de datos

    • Errores descuidados como este pueden causar congestión para todos los usuarios de internet
    • Si este error no hubiera costado $8000, sino que se hubiera absorbido con el nivel gratuito de Google Cloud u otro plan, me pregunto si igual lo habrían considerado un bug grave y lo habrían corregido rápidamente
    • Cuántos diseños defectuosos estarán generando tráfico y consumiendo recursos compartidos
  • Cuando distribuí una aplicación de escritorio para Mac:

    • Usamos Sparkle para gestionar las actualizaciones. Elegir su propio actualizador fue una mala decisión
    • Nuestra aplicación era muy compleja y se distribuía junto con Mono. Aun así, pesaba alrededor de 10 MB. La versión de Windows pesaba 2 MB e incluía binarios de 32 y 64 bits. Me pregunto por qué distribuyen un grabador de pantalla de 250 MB
    • No parece que hayan aprendido la lección. Todo el artículo los hace ver como tontos
  • Sorprende que "mejores pruebas" no se mencionen en el resumen

    • La sugerencia de "escriban el código con cuidado" suena como un error de principiante
    • Es muy frustrante que los desarrolladores usen los dispositivos de los usuarios como banco de pruebas
  • Soy conservador con la adopción de bibliotecas de terceros (porque cada biblioteca puede convertirse en un problema a largo plazo), pero las actualizaciones de aplicaciones sí valen la pena

    • Esto es básicamente un gran caso límite, y es una parte importante del plan de recuperación si la app tiene un bug grave
    • Este bug no es el único problema de su autoactualizador. Revisar cada 5 minutos es una locura. Demuestra que no lo pensaron a fondo
  • Opero un servicio de proxy anticensura que usa archivos Proxy Auto-Configuration (PAC)

    • Si el archivo contiene JS incorrecto, o si el tamaño del archivo supera 1 MB, se produce un problema en el que todas las apps siguen enviando solicitudes al servidor cuando está configurado a nivel de todo el sistema
    • Eso terminó haciendo DDoS a mi servidor y provocó que bloquearan la IP a nivel BGP
    • Lo usan más de 500,000 personas cada día. Mi servidor web corre en un VPS de $20 al mes con tráfico ilimitado. Gracias a eso no terminé en una situación como la del OP