¿Con qué frecuencia se cometen errores graves en Piper en Google, que terminan interrumpiendo el trabajo diario de una gran cantidad de desarrolladores de Google?

Es extremadamente raro.

He estado trabajando en Google durante cerca de 5.5 años y solo ha sucedido una vez.

Estoy muy confuso en los detalles, pero creo que una característica experimental que se activó en uno de los grupos mató a un grupo completo de máquinas y sobrecargó otras que impidieron una conmutación por error. Como resultado, perdimos el acceso a Piper. La interrupción duró entre 6 y 7 horas y afectó a alrededor de 1000 desarrolladores (~ 5%). Yo fui uno de los desafortunados.

Fue tan raro que diseñé una insignia de logro para ella y se la di a todos los usuarios afectados que decía “Sobreviví a la gran interrupción de Piper de agosto de 2015”.

EDITAR

(OP me señaló que estaba hablando de errores que se registran en la base de código sin lanzamientos cerrados que afectan potencialmente a muchos proyectos dependientes):

Dichos errores son mucho más comunes (una o dos veces al mes), pero varios sistemas mitigan los problemas de desarrollo:

Liberación de componentes

En realidad, hay un ciclo de lanzamiento para el núcleo de Google. Esto se llama liberación de componentes. Por ejemplo, si realiza un cambio en la implementación de protobuffer, no puede registrarlo en el tronco de inmediato. Primero debe enviarse a un repositorio especial, revisarse a fondo y luego liberarse al tronco como parte de un lanzamiento de componentes.

Ocasionalmente, obtenemos versiones de componentes defectuosos que se marcarán automáticamente y se bloquearán en el nivel del sistema de compilación para que nadie genere binarios de liberación desde ese tronco.

Plataforma de automatización de prueba

Las dependencias menos importantes (pero aún comunes) se benefician del desarrollo de troncales ya que permite rastrear las dependencias en tiempo real a través de la base de código de Google. Con este tipo de seguimiento, es posible realizar pruebas automatizadas casi en tiempo real.

Si es desarrollador de marcos y 100 equipos lo utilizan, normalmente debe ejecutar sus pruebas antes de enviar los cambios. Esto asegura que no se rompan.

Retroceso rápido

Nuevamente, debido al desarrollo del tronco, es fácil arreglar cosas. Si terminas rompiendo a alguien incluso con las comprobaciones anteriores, retroceder generalmente resuelve el problema en minutos.

Las pruebas automatizadas son realmente grandes en Google. Las estadísticas de cobertura y salud del proyecto se rastrean en toda la empresa y hay paneles internos que le permiten ver todo esto. Hay arreglos regulares programados para ayudar a las áreas de productos en dificultades a obtener su mierda (también conocida como pruebas). Sin eso, el desarrollo del tronco sería una pesadilla. En mi compañía anterior, la mayoría de las pruebas fueron realizadas por personas (Q / A) en los lanzamientos. No puedo imaginar este tipo de desarrollo trabajando allí.

Solo trabajé en Google durante 7 meses (2 pasantías), pero dado que me pidieron que respondiera, proporcionaré mi perspectiva: los errores graves que perturban a muchos ingenieros de Google son bastante raros.

Solo recuerdo que sucedió una vez. Lamentablemente, escribí ese error, que pasó desapercibido en la revisión del código, y requirió una sala de guerra con varios equipos trabajando para solucionar las consecuencias lo antes posible.

En comparación, los errores graves son mucho más frecuentes en Facebook. Creo que esto es por diseño. La filosofía de desarrollo de Google y Facebook es bastante diferente. Los ingenieros de Google pasan mucho más tiempo en la revisión del código (tanto para verificar el código como para exigir pruebas) y herramientas (por ejemplo, sistemas de monitoreo). Facebook todavía está bajo la influencia del mantra Mover rápido y romper cosas (lo bueno es una velocidad de desarrollo mucho más rápida).

Las herramientas de Google son de primera categoría, muy por encima de cualquier otra cosa que haya visto en otros lugares. El problema causado por el error que mencioné fue rápidamente detectado por los sistemas de monitoreo.

Una mala confirmación que rompe la compilación o tiene malas pruebas se revierte rápidamente si no se corrige rápidamente. Los ingenieros de Google se enorgullecen de las buenas pruebas y las pruebas / compilaciones ecológicas (lo que significa que no fallan las pruebas debido a una mala confirmación).

PD: cuando digo que solo lo vi una vez, significa 1 error que afecta a mi división, no a todo Google (de lo que sería ajeno, a menos que fuera algo catastrófico que afectara a toda la empresa).

No he estado en Google el tiempo suficiente para decir con qué frecuencia sucede (aunque supongo que esa declaración en sí misma da un límite superior; no puede suceder con demasiada frecuencia, ¡o tendría suficientes datos para estimar una frecuencia! ) Supongo que puedo recordar dos casos en los que un commit rompió la compilación o la prueba de una fracción significativa del árbol de compilación por orden por hora; en ambos casos hubo un buen post-mortem posterior que identificó el atajo que se había implementado para sortear los mecanismos que normalmente evitan que esto suceda, y concluyó que el atajo no había sido realmente una buena idea , y se eliminaría (o se haría significativamente más seguro).

Tenga en cuenta que en ninguno de los casos fue realmente algo malo. 🙂 Probablemente cada uno causó nominalmente miles de millones de dólares en tiempo perdido de ingeniero, pero en ambos casos la gente se divirtió recitándose mutuamente en hilos de mensajes, recordando los saltos de compilación en conciertos anteriores, haciendo memes lindos, etc. Supongo que la mejora general de la productividad de unos pocos miles de ingenieros que tuvieron un breve descanso no programado probablemente superó la interrupción a largo plazo.

(¡O tal vez solo disfruto un poco de caos!)

Creo que hay informes aquí y allá sobre toda la inteligencia normal que tienen los sistemas de desarrollo de Google para evitar que esto suceda en el curso normal de la operación (cada confirmación se prueba hipotéticamente antes de que se permita, natch). Y el lugar también es lo suficientemente flexible como para permitir que se omita donde parece requerido (y para poder deshacer esa decisión cuando una autopsia lo solicita).