The Devops Handbook Español PDF
The Devops Handbook Español PDF
Página 3
2
Portland, OR 97210
Copyright © 2016 por Gene Kim, Jez Humble, Patrick Debois y John
Willis
Todos los derechos reservados, para obtener información sobre el permiso para reproducir
selecciones de este libro, escriba a Permissions, IT Revolution Press, LLC,
25 NW 23rd Pl, Suite 6314, Portland, OR 97210
Primera edición
10 9 8 7 6 5 4 3 2 1
Nota del editor a los lectores: muchas de las ideas, citas y paráfrasis
atribuido a diferentes pensadores y líderes de la industria aquí se extraen
de conversaciones informales, correspondencia, entrevistas, conferencias
mesas redondas y otras formas de comunicación oral que tuvieron lugar durante
los últimos seis años durante el desarrollo y la escritura de este libro. A pesar de que
los autores y el editor han hecho todo lo posible para garantizar que
la información en este libro era correcta al momento de la publicación, los autores y
el editor no asume y por la presente renuncia a cualquier responsabilidad ante cualquier parte por
cualquier pérdida, daño o interrupción causada por errores u omisiones, ya sea
Para obtener información sobre descuentos especiales para compras a granel o para
Para obtener información sobre los autores de reserva para un evento, visite ITRevolution.com.
Página 4
EL MANUAL DEVOPS
Prefacio
¡Ajá!
Gene Kim
He tenido el privilegio de estudiar de alto rendimiento
organizaciones tecnológicas desde 1999, y una de las
Los primeros hallazgos fueron que abarcan los límites.
Página 7
Página 8
Jez Humble
Mi momento "ajá" de DevOps fue en un arranque en 2000
—Mi primer trabajo después de graduarme. Por un tiempo estuve
Uno de los dos técnicos. Yo hice todo:
redes, programación, soporte, sistemas
administración. Implementamos software para producción
por FTP directamente desde nuestras estaciones de trabajo.
Página 9
Patrick Debois
Para mí, fue una colección de momentos. En 2007 estaba
trabajando en un proyecto de migración del centro de datos con algunos
Equipos ágiles. Estaba celoso de que tuvieran tanto
productividad: capaz de hacer tanto en tan poco
hora.
Página 10
John Willis
En 2008, acababa de vender un negocio de consultoría que
enfocado en prácticas de operaciones de TI heredadas a gran escala
alrededor de la gestión de configuración y monitoreo
(Tivoli) cuando conocí a Luke Kanies (el fundador de
Laboratorios de marionetas). Luke estaba haciendo una presentación sobre
Marioneta en una conferencia de código abierto de O'Reilly sobre
gestión de configuración (CM).
Pagina 12
Página 13
Página 14
Página 15
Página 16
Página 17
Imagine un mundo donde los propietarios de productos, desarrollo, control de calidad, operaciones de TI e Infosec
trabajar juntos, no solo para ayudarse mutuamente, sino también para garantizar que la organización en general
tiene éxito Al trabajar hacia un objetivo común, permiten el flujo rápido de trabajo planificado
en producción (por ejemplo, realizar decenas, cientos o incluso miles de implementaciones de código por
día), mientras se logra estabilidad, confiabilidad, disponibilidad y seguridad de clase mundial.
En este mundo, los equipos interfuncionales prueban rigurosamente sus hipótesis sobre qué características
La mayoría deleita a los usuarios y promueve los objetivos de la organización. No solo les importa
implementando funciones de usuario, pero también asegurando activamente que su trabajo fluya sin problemas y
frecuentemente a través de todo el flujo de valor sin causar caos e interrupción a TI
Operaciones o cualquier otro cliente interno o externo.
Esto permite a las organizaciones crear un sistema de trabajo seguro, donde pequeños equipos pueden
Desarrolle, pruebe e implemente de forma rápida e independiente el código y el valor de forma rápida, segura,
de forma segura y confiable para los clientes. Esto permite a las organizaciones maximizar el desarrollador
productividad, permitir el aprendizaje organizacional, crear una alta satisfacción de los empleados y ganar
el mercado.
Estos son los resultados que resultan de DevOps. Para la mayoría de nosotros, este no es el mundo que
vivir. Más a menudo que no, el sistema en el que trabajamos está roto, lo que resulta en extremadamente pobre
resultados que están muy por debajo de nuestro verdadero potencial. En nuestro mundo, desarrollo y TI
Las operaciones son adversarias; las pruebas y las actividades de Infosec ocurren solo al final de un
proyecto, demasiado tarde para corregir cualquier problema encontrado; y casi cualquier actividad crítica también requiere
mucho esfuerzo manual y demasiadas transferencias, dejándonos siempre esperando. No solo
Como resultado, no cumplimos con nuestros objetivos, y toda la organización está insatisfecha con el
rendimiento de TI, lo que resulta en reducciones de presupuesto y empleados frustrados e infelices que
sentirse impotente para cambiar el proceso y sus resultados. † ¿ La solución? Necesitamos cambiar
cómo trabajamos; DevOps nos muestra el mejor camino a seguir.
Antes de la revolución, los plazos de entrega promedio de pedidos de plantas de fabricación eran de seis semanas, con
Menos del 70% de los pedidos se envían a tiempo. Para 2005, con el generalizado
Página 21
implementación de prácticas Lean, los plazos de entrega promedio del producto se redujeron a menos de
tres semanas, y más del 95% de los pedidos se enviaron a tiempo. Organizaciones que
no implementó las prácticas Lean, perdió participación de mercado y muchos cerraron
enteramente.
Del mismo modo, se ha elevado el listón para ofrecer productos y servicios tecnológicos: qué
fue lo suficientemente bueno en décadas anteriores no es lo suficientemente bueno ahora. Para cada uno de los últimos cuatro
décadas, el costo y el tiempo requeridos para desarrollar e implementar capacidades comerciales estratégicas
y las características se han reducido en órdenes de magnitud. Durante las décadas de 1970 y 1980, la mayoría de los nuevos
Las características requieren de uno a cinco años para desarrollarse y desplegarse, a menudo cuestan decenas de millones de
dolares
Hoy, las organizaciones que adoptan los principios y prácticas de DevOps a menudo implementan cambios
cientos o incluso miles de veces por día. En una época donde la ventaja competitiva
requiere un tiempo de comercialización rápido y una experimentación incesante, organizaciones que no pueden
para replicar estos resultados están destinados a perder en el mercado a más ágil
competidores y potencialmente podrían cerrar completamente, como la fabricación
organizaciones que no adoptaron los principios Lean.
Página 22
En estos días, independientemente de en qué industria estamos compitiendo, la forma en que adquirimos clientes
y entregarles valor depende de la corriente de valor de la tecnología. Pon aún más
sucintamente, como declaró Jeffrey Immelt, CEO de General Electric, "Todas las industrias y
la empresa que no está llevando el software al núcleo de su negocio se verá afectada ". O como
Jeffrey Snover, miembro técnico de Microsoft, dijo: "En épocas económicas anteriores, las empresas
valor creado moviendo átomos. Ahora crean valor moviendo bits ".
Ahora que hemos establecido la urgencia del problema que resuelve DevOps, tomemos
tiempo para explorar con más detalle la sintomatología del problema, por qué ocurre y
por qué, sin una intervención dramática, el problema empeora con el tiempo.
En su lugar, la mayoría de las organizaciones no pueden implementar cambios de producción en minutos u horas.
requiriendo semanas o meses. Tampoco pueden implementar cientos o miles de cambios
en producción por día; en cambio, luchan por desplegarse mensualmente o incluso trimestralmente. Ni
son rutinas de despliegues de producción, en lugar de interrupciones y extinción de incendios crónicos y
heroica
En una era donde la ventaja competitiva requiere un tiempo de comercialización rápido, altos niveles de servicio,
e incesante experimentación, estas organizaciones se encuentran en una competencia significativa
desventaja. Esto se debe en gran parte a su incapacidad para resolver un conflicto central crónico
dentro de su organización tecnológica.
El término "deuda técnica" fue acuñado por primera vez por Ward Cunningham. Análogo a financiero
deuda, la deuda técnica describe cómo las decisiones que tomamos conducen a problemas que
cada vez más difícil de solucionar con el tiempo, reduciendo continuamente nuestras opciones disponibles en
el futuro, incluso cuando se toma con prudencia, seguimos generando intereses.
Un factor que contribuye a esto son los objetivos a menudo competitivos del Desarrollo y TI
Operaciones Las organizaciones de TI son responsables de muchas cosas. Entre ellos están los dos
siguientes objetivos, que deben perseguirse simultáneamente:
Página 23
El primer acto comienza en las operaciones de TI, donde nuestro objetivo es mantener las aplicaciones y
infraestructura en funcionamiento para que nuestra organización pueda ofrecer valor a los clientes. En nuestro diario
trabajo, muchos de nuestros problemas se deben a aplicaciones e infraestructura que son complejas,
mal documentado e increíblemente frágil. Esta es la deuda técnica y diaria
soluciones con las que vivimos constantemente, siempre prometiendo que arreglaremos el desastre cuando
Ten un poco más de tiempo. Pero ese momento nunca llega.
Es alarmante que nuestros artefactos más frágiles respalden nuestros ingresos más importantes.
sistemas generadores o nuestros proyectos más críticos. En otras palabras, los sistemas más propensos a
El fracaso también es nuestro más importante y está en el epicentro de nuestros cambios más urgentes.
Cuando estos cambios fallan, ponen en peligro nuestras promesas organizacionales más importantes, como
como disponibilidad para los clientes, objetivos de ingresos, seguridad de los datos del cliente, información financiera precisa
informes, y así sucesivamente.
El segundo acto comienza cuando alguien tiene que compensar la última promesa rota:
podría ser un gerente de producto que promete una característica más grande y audaz para deslumbrar a los clientes con o
un ejecutivo de negocios que establece un objetivo de ingresos aún mayor. Entonces, ajeno a lo que
la tecnología puede o no puede hacer, o qué factores llevaron a perder nuestro compromiso anterior, ellos
comprometer a la organización tecnológica a cumplir esta nueva promesa.
Como resultado, el desarrollo tiene la tarea de otro proyecto urgente que inevitablemente requiere
resolviendo nuevos desafíos técnicos y atajos para cumplir con la fecha de lanzamiento prometida,
agregando aún más a nuestra deuda técnica, hecha, por supuesto, con la promesa de que arreglaremos cualquier
problemas resultantes cuando tenemos un poco más de tiempo.
Esto prepara el escenario para el tercer y último acto, donde todo se vuelve un poco más
difícil, poco a poco: todos se ponen un poco más ocupados, el trabajo lleva un poco más de tiempo,
Página 24
las comunicaciones se vuelven un poco más lentas y las colas de trabajo se alargan un poco más. Nuestro trabajo
se vuelve más estrechamente acoplado, acciones más pequeñas causan fallas más grandes, y nos volvemos más
temeroso y menos tolerante de hacer cambios. El trabajo requiere más comunicación,
coordinación y aprobaciones; los equipos deben esperar un poco más por su trabajo dependiente
para terminar y nuestra calidad sigue empeorando. Las ruedas comienzan a moler más lentamente y
Como resultado, nuestros ciclos de entrega de productos continúan avanzando más y más lentamente, menos proyectos
se emprenden, y los que son, son menos ambiciosos. Además, los comentarios sobre
El trabajo de todos se vuelve más lento y más débil, especialmente las señales de retroalimentación de nuestro
clientes. Y, independientemente de lo que intentemos, las cosas parecen empeorar: ya no podemos
para responder rápidamente a nuestro cambiante panorama competitivo, ni podemos proporcionar
Servicio estable y confiable a nuestros clientes. Como resultado, finalmente perdemos en el mercado.
Una y otra vez, aprendemos que cuando falla la TI, toda la organización falla. Como Steven J.
Spear señaló en su libro The High-Velocity Edge , si los daños "se desarrollan lentamente como
una enfermedad debilitante "o rápidamente" como un choque de fuego ... la destrucción puede ser igual de completa ".
Como Christopher Little, un ejecutivo de software y uno de los primeros cronistas de DevOps,
dijo: "Cada empresa es una empresa de tecnología, independientemente de qué negocio piensan
están dentro. Un banco es solo una compañía de TI con una licencia bancaria ". §
Para convencernos de que este es el caso, tenga en cuenta que la gran mayoría del capital
los proyectos tienen cierta dependencia de TI. Como dice el dicho: "Es prácticamente imposible hacer
cualquier decisión comercial que no resulte en al menos un cambio de TI ".
En el contexto empresarial y financiero, los proyectos son críticos porque sirven como el principal
mecanismo de cambio dentro de las organizaciones. Los proyectos son típicamente lo que la gerencia necesita
aprobar, presupuestar y rendir cuentas; por lo tanto, son el mecanismo que
lograr los objetivos y aspiraciones de la organización, ya sea para crecer o incluso reducirse.¶
Los proyectos generalmente se financian a través de gastos de capital (es decir, fábricas, equipos y
proyectos importantes, y los gastos se capitalizan cuando se espera que la recuperación de la inversión demore años),
de los cuales el 50% ahora está relacionado con la tecnología. Esto es incluso cierto en verticales de la industria de "baja tecnología"
con el gasto histórico más bajo en tecnología, como energía, metal, recursos
extracción, automotriz y construcción. En otras palabras, los líderes empresariales son mucho más
Página 25
Muchos psicólogos afirman que crear sistemas que causan sentimientos de impotencia es uno
de las cosas más perjudiciales que podemos hacer a otros seres humanos: privamos a otras personas de
su capacidad para controlar sus propios resultados e incluso crear una cultura donde las personas están
miedo de hacer lo correcto por temor a castigo, fracaso o poner en peligro su
sustento. Esto puede crear las condiciones de impotencia aprendida , donde las personas se vuelven
reacio o incapaz de actuar de una manera que evite el mismo problema en el futuro.
Para nuestros empleados, significa largas horas, trabajar los fines de semana y una disminución de la calidad de
vida, no solo para el empleado, sino para todos los que dependen de ellos, incluidos familiares y
amigos. No es sorprendente que cuando esto ocurre, perdemos a nuestra mejor gente (excepto aquellos
que sienten que no pueden irse, debido a un sentido del deber u obligación).
Además del sufrimiento humano que viene con la forma actual de trabajar, el
El costo de oportunidad del valor que podríamos estar creando es asombroso: los autores creen
que estamos perdiendo aproximadamente $ 2.6 billones de creación de valor por año, que es,
Al momento de escribir este artículo, equivalente a la producción económica anual de Francia, el sexto
La economía más grande del mundo.
Considere el siguiente cálculo: tanto IDC como Gartner estimaron que en 2011,
aproximadamente el 5% del producto interno bruto mundial ($ 3,1 billones) se gastó en TI
(hardware, servicios y telecomunicaciones). Si estimamos que el 50% de esos $ 3.1 billones se gastó en
costos de operación y mantenimiento de los sistemas existentes, y que un tercio de ese 50% se gastó
en trabajos o reprocesos urgentes y no planificados, se desperdiciaron aproximadamente $ 520 mil millones.
Si la adopción de DevOps nos podría permitir, a través de una mejor gestión y un aumento
excelencia operativa, reducir a la mitad ese desperdicio y volver a desplegar ese potencial humano en
algo que es cinco veces el valor (una propuesta modesta), podríamos crear $ 2.6 billones de
valor por año.
Esta combinación emocionante y rara puede explicar por qué DevOps ha generado tanto
entusiasmo y entusiasmo en tantos en tan poco tiempo, incluidos los líderes tecnológicos,
Al crear ciclos de retroalimentación rápidos en cada paso del proceso, todos pueden ver de inmediato
Los efectos de sus acciones. Cada vez que se comprometan cambios en el control de versiones, rápido
Las pruebas automatizadas se ejecutan en entornos similares a la producción, lo que garantiza continuamente que
el código y los entornos funcionan según lo diseñado y siempre están en un lugar seguro y desplegable
estado.
Las pruebas automatizadas ayudan a los desarrolladores a descubrir sus errores rápidamente (generalmente dentro de
minutos), que permite soluciones más rápidas, así como un aprendizaje genuino, aprendizaje que es
imposible cuando se descubren errores seis meses después durante las pruebas de integración, cuando
Los recuerdos y el vínculo entre causa y efecto se han desvanecido por mucho tiempo. En lugar de acumularse
deuda técnica, los problemas se resuelven a medida que se encuentran, movilizando a toda la organización si
necesario, porque los objetivos globales superan los objetivos locales.
En este escenario, todos se sienten productivos: la arquitectura permite que pequeños equipos trabajen
Desacoplado de forma segura y arquitectónica del trabajo de otros equipos que utilizan el autoservicio
plataformas que aprovechan la experiencia colectiva de Operaciones y Seguridad de la Información.
En lugar de que todos esperen todo el tiempo, con grandes cantidades de retrabajo, trabajo urgente, equipos
trabaje de manera independiente y productiva en pequeños lotes, entregando rápida y frecuentemente
Nuevo valor para los clientes.
Incluso los lanzamientos de productos y funciones de alto perfil se vuelven rutinarios mediante el lanzamiento oscuro
técnicas Mucho antes de la fecha de lanzamiento, colocamos todo el código requerido para la función en
producción, invisible para todos, excepto para empleados internos y pequeños grupos de usuarios reales,
lo que nos permite probar y desarrollar la función hasta que alcance el objetivo comercial deseado.
Y, en lugar de combatir incendios durante días o semanas para que la nueva funcionalidad funcione, nosotros
simplemente cambie una función de alternancia o configuración. Este pequeño cambio hace que el nuevo
característica visible para segmentos cada vez más grandes de clientes, retrocediendo automáticamente si
Algo va mal. Como resultado, nuestros lanzamientos son controlados, predecibles, reversibles y
No solo las versiones están más tranquilas: se están encontrando todo tipo de problemas y
arreglado temprano, cuando son más pequeños, más baratos y más fáciles de corregir. Con cada solución, también
Página 27
generar aprendizajes organizacionales, lo que nos permite evitar que el problema se repita y
permitiéndonos detectar y corregir problemas similares más rápido en el futuro.
Además, todos están aprendiendo constantemente, fomentando una cultura basada en hipótesis donde
El método científico se utiliza para garantizar que nada se dé por sentado: no hacemos nada sin
medir y tratar el desarrollo de productos y la mejora de procesos como experimentos.
Debido a que valoramos el tiempo de todos, no pasamos años creando características que nuestro
los clientes no quieren, implementando código que no funciona o arreglando algo que no funciona
En realidad la causa de nuestro problema.
Debido a que nos preocupamos por lograr los objetivos, creamos equipos a largo plazo que son responsables de
reuniéndolos En lugar de equipos de proyecto donde los desarrolladores son reasignados y barajados
después de cada lanzamiento, sin recibir comentarios sobre su trabajo, mantenemos los equipos intactos
pueden seguir iterando y mejorando, utilizando esos aprendizajes para lograr mejor sus objetivos.
Esto es igualmente cierto para los equipos de productos que están resolviendo problemas para nuestros
clientes, así como nuestros equipos de plataforma interna que ayudan a otros equipos a ser más
productivo, seguro y seguro.
En lugar de una cultura del miedo, tenemos una cultura colaborativa de alta confianza, donde las personas están
recompensado por tomar riesgos. Son capaces de hablar sin temor sobre problemas en lugar de
ocultándolos o poniéndolos en segundo plano, después de todo, debemos ver los problemas en orden
para resolverlos
Y, debido a que todos poseen la calidad de su trabajo, todos construyen de manera automatizada
prueba en su trabajo diario y utiliza revisiones por pares para ganar confianza en que los problemas son
abordado mucho antes de que puedan afectar a un cliente. Estos procesos mitigan el riesgo, como
en oposición a las aprobaciones de autoridades distantes, lo que nos permite entregar valor de manera rápida y confiable,
y de forma segura, incluso demostrando a auditores escépticos que tenemos un sistema efectivo de
controles internos.
Y cuando algo sale mal, llevamos a cabo autopsias sin culpa , para no castigar
cualquiera, pero para comprender mejor qué causó el accidente y cómo prevenirlo. Esta
El ritual refuerza nuestra cultura de aprendizaje. También realizamos conferencias tecnológicas internas para
elevar nuestras habilidades y garantizar que todos estén siempre enseñando y aprendiendo.
Debido a que nos importa la calidad, incluso inyectamos fallas en nuestro entorno de producción, por lo que
puede aprender cómo falla nuestro sistema de manera planificada. Realizamos ejercicios planificados para
practicar fallas a gran escala, matar procesos al azar y calcular servidores en producción,
e inyectar latencias de red y otros actos nefastos para garantizar que crezcamos cada vez más
Página 28
Tenemos evidencia decisiva del valor comercial de DevOps. Desde 2013 hasta 2016, como
parte del informe State Of DevOps de Puppet Labs , al que los autores Jez Humble y Gene Kim
contribuido, recopilamos datos de más de veinticinco mil profesionales de la tecnología,
con el objetivo de comprender mejor la salud y los hábitos de las organizaciones en todas las etapas de
Adopción de DevOps.
La primera sorpresa que revelaron estos datos fue la cantidad de organizaciones de alto rendimiento que utilizan
Las prácticas de DevOps superaron a sus pares de bajo rendimiento en lo siguiente
áreas:
Métricas de rendimiento
Métricas de confiabilidad
Objetivos de productividad, participación de mercado y rentabilidad (dos veces más probabilidades de exceder)
En otras palabras, los de alto rendimiento fueron más ágiles y más confiables, proporcionando
La evidencia empírica de que DevOps nos permite romper el conflicto central y crónico. Alto
los artistas implementaron el código treinta veces más frecuentemente y el tiempo requerido para pasar de
El "código comprometido" para "ejecutarse con éxito en la producción" fue doscientas veces más rápido:
los de alto rendimiento tenían tiempos de entrega medidos en minutos u horas, mientras que los de bajo rendimiento tenían
Además, los de alto rendimiento tenían el doble de probabilidades de superar la rentabilidad, la cuota de mercado,
y objetivos de productividad. Y, para aquellas organizaciones que proporcionaron un símbolo de cotización bursátil, nosotros
descubrió que los de alto rendimiento tuvieron un crecimiento de capitalización de mercado un 50% mayor en tres años.
También tuvieron una mayor satisfacción laboral de los empleados, menores tasas de agotamiento de los empleados y su
los empleados tenían 2,2 veces más probabilidades de recomendar su organización a sus amigos como un gran
lugar para trabajar.†† Los de alto rendimiento también tuvieron mejores resultados de seguridad de la información. Por
integrando objetivos de seguridad en todas las etapas de los procesos de desarrollo y operaciones,
dedicaron un 50% menos de tiempo a solucionar problemas de seguridad.
Página 29
Por otro lado, DevOps nos muestra que cuando tenemos la arquitectura correcta, la correcta
prácticas técnicas y las normas culturales correctas, pequeños equipos de desarrolladores pueden
Desarrolle, integre, pruebe e implemente cambios de forma rápida, segura e independiente en
producción. Como observó Randy Shoup, anteriormente director de ingeniería de Google,
Las organizaciones que utilizan DevOps "tienen miles de desarrolladores, pero su arquitectura y
las prácticas permiten que los equipos pequeños sigan siendo increíblemente productivos, como si fueran una startup ".
El Informe del estado de DevOps de 2015 examinó no solo "implementaciones por día" sino también "implementaciones
por día por desarrollador ". Presumimos que los de alto rendimiento podrían escalar sus
número de implementaciones a medida que creció el tamaño del equipo.
De hecho, esto es lo que encontramos. La Figura 1 muestra que en los de bajo rendimiento, las implementaciones por día por
el desarrollador baja a medida que aumenta el tamaño del equipo, se mantiene constante para los de mediano rendimiento y
aumenta linealmente para artistas de alto rendimiento.
En otras palabras, las organizaciones que adoptan DevOps pueden aumentar linealmente el número de
se implementa por día a medida que aumentan su número de desarrolladores, al igual que Google, Amazon y
Netflix lo ha hecho.§§
LA UNIVERSALIDAD DE LA SOLUCIÓN
Uno de los libros más influyentes en el movimiento de manufactura esbelta es The Goal: A
Proceso de mejora continua escrito por el Dr. Eliyahu M. Goldratt en 1984. Influyó
Una generación entera de gerentes de planta profesionales en todo el mundo. Era una novela sobre
un gerente de planta que tuvo que arreglar sus problemas de costos y fecha de vencimiento del producto en noventa días,
de lo contrario su planta se cerraría.
Más adelante en su carrera, el Dr. Goldratt describió las cartas que recibió en respuesta a The Goal.
Estas cartas normalmente decían: "Obviamente te has estado escondiendo en nuestra fábrica, porque
has descrito mi vida [como gerente de planta] exactamente ... "Lo más importante, estas cartas
mostró que las personas pudieron replicar los avances en el rendimiento que fueron
descrito en el libro en sus propios entornos de trabajo.
El Proyecto Phoenix: una novela sobre TI, DevOps y cómo ayudar a su empresa a ganar , escrito
por Gene Kim, Kevin Behr y George Spafford en 2013, se inspiró en el modelo The
Objetivo . Es una novela que sigue a un líder de TI que enfrenta todos los problemas típicos
Página 30
endémico en las organizaciones de TI: un proyecto con exceso de presupuesto y retraso que debe llegar a
mercado para que la empresa pueda sobrevivir. Experimenta despliegues catastróficos;
problemas de disponibilidad, seguridad y cumplimiento; Etcétera. En definitiva, él y su
el equipo usa los principios y prácticas de DevOps para superar esos desafíos, ayudando a sus
organización gana en el mercado. Además, la novela muestra cómo practican DevOps
mejoró el entorno laboral para el equipo, creando menos estrés y más
satisfacción debido a una mayor participación del profesional en todo el proceso.
Al igual que con The Goal , existe una tremenda evidencia de la universalidad de los problemas y
soluciones descritas en The Phoenix Project. Considere algunas de las declaraciones que se encuentran en el
Amazon comenta: "Me encuentro relacionado con los personajes de The Phoenix Project ... he
probablemente conocí a la mayoría de ellos en el transcurso de mi carrera "" Si alguna vez has trabajado en alguna
aspecto de TI, DevOps o Infosec definitivamente podrá relacionarse con este libro "o
"No hay un personaje en The Phoenix Project que no identifique conmigo mismo o
alguien que conozco en la vida real ... sin mencionar los problemas que enfrentan y superan aquellos
caracteres."
El propósito del Manual de DevOps es brindarle la teoría, los principios y las prácticas.
necesita iniciar con éxito su iniciativa DevOps y lograr los resultados deseados.
Esta guía se basa en décadas de teoría de gestión sólida, estudio de alto rendimiento.
organizaciones tecnológicas, trabajo que hemos realizado para ayudar a las organizaciones a transformarse, y
investigación que valida la efectividad de las prácticas DevOps prescritas. Tanto como
entrevistas con expertos en la materia relevantes y análisis de casi cien casos
estudios presentados en la Cumbre de DevOps Enterprise.
Dividido en seis partes, este libro cubre las teorías y principios de DevOps utilizando los Tres
Ways, una visión específica de la teoría subyacente introducida originalmente en The Phoenix
Proyecto . El manual de DevOps es para todos los que realizan o influyen en el trabajo en el
flujo de valor tecnológico (que generalmente incluye gestión de productos, desarrollo,
Control de calidad, operaciones de TI y seguridad de la información), así como para negocios y marketing
liderazgo, donde se originan la mayoría de las iniciativas tecnológicas.
Nuestra intención es crear un conocimiento práctico de los conceptos críticos en cada uno de estos
dominios, tanto para servir como una cartilla e introducir el lenguaje necesario para ayudar
los profesionales trabajan con todos sus pares en todo el flujo de valor de TI y enmarcan
objetivos compartidos.
Este libro será de valor para los líderes empresariales y las partes interesadas que son cada vez más dependientes
sobre la organización tecnológica para el logro de sus objetivos.
Page 31
Además, este libro está destinado a lectores cuyas organizaciones podrían no ser
experimentando todos los problemas descritos en el libro (por ejemplo, largos plazos de implementación o
despliegues dolorosos). Incluso los lectores en esta posición afortunada se beneficiarán de
comprender los principios de DevOps, especialmente aquellos relacionados con objetivos compartidos, comentarios y
aprendizaje continuo
La Parte III describe cómo acelerar Flow al construir los cimientos de nuestro despliegue
pipeline: permitiendo pruebas automatizadas rápidas y efectivas, integración continua, continua
entrega y arquitectura para lanzamientos de bajo riesgo.
La Parte IV discute cómo acelerar y amplificar la retroalimentación creando una producción efectiva
telemetría para ver y resolver problemas, anticipar mejor los problemas y alcanzar objetivos, permitir
retroalimentación para que Dev y Ops puedan implementar cambios de manera segura, integrar pruebas A / B en nuestro
trabajo diario, y crear procesos de revisión y coordinación para aumentar la calidad de nuestro
trabajo.
La Parte V describe cómo aceleramos el aprendizaje continuo al establecer una cultura justa,
convirtiendo descubrimientos locales en mejoras globales, y reservando adecuadamente el tiempo para
Crear aprendizaje organizacional y mejoras.
† Esta es solo una pequeña muestra de los problemas encontrados en las organizaciones de TI típicas.
‡ En el ámbito de la fabricación, existía un conflicto crónico similar: la necesidad de garantizar simultáneamente los envíos a tiempo a los clientes y controlar los costos.
En el Apéndice 2 se describe cómo se rompió este conflicto crónico central.
§ En 2013, el banco europeo HSBC empleó más desarrolladores de software que Google.
¶ Por ahora, suspendamos la discusión sobre si el software debe ser financiado como un "proyecto" o un "producto". Esto se discute más adelante en el libro.
** Por ejemplo, el Dr. Vernon Richardson y sus colegas publicaron este sorprendente hallazgo. Estudiaron las presentaciones de 10-K SEC de 184 corporaciones públicas
y los dividió en tres grupos: A) empresas con debilidades materiales con deficiencias relacionadas con TI, B) empresas con debilidades materiales sin problemas relacionados con TI
deficiencias, y C) "empresas limpias" sin debilidades materiales. Las empresas del Grupo A registraron una rotación del CEO ocho veces mayor que el Grupo C, y hubo cuatro
veces mayor rotación de CFO en el Grupo A que en el Grupo C. Claramente, TI puede importar mucho más de lo que normalmente pensamos.
†† Medido por la puntuación neta del promotor del empleado (eNPS). Este es un hallazgo significativo, ya que la investigación ha demostrado que "las empresas con trabajadores altamente comprometidos
Los ingresos crecieron dos veces y media más que aquellos con bajos niveles de participación. Y acciones [cotizadas en bolsa] de compañías con un trabajo de alta confianza
el medio ambiente superó los índices del mercado en un factor de tres desde 1997 hasta 2011 ".
‡‡ Solo se muestran las organizaciones que se implementan al menos una vez al día.
§§ Otro ejemplo más extremo es Amazon. En 2011, Amazon realizaba aproximadamente siete mil implementaciones por día. Para 2015, estaban
realizando 130,000 implementaciones por día.
Página
Page 3332
Página 35
EL MOVIMIENTO LEAN
Técnicas como la asignación de flujo de valor, Kanban
Se codificaron tableros y mantenimiento productivo total
para el sistema de producción de Toyota en la década de 1980. En 1997,
el Lean Enterprise Institute comenzó a investigar
aplicaciones de Lean a otras corrientes de valor, como el
industria de servicios y asistencia sanitaria.
El manifiesto ágil
Page 36
Page 37
TOYOTA KATA
En 2009, Mike Rother escribió Toyota Kata: Gestión
Personas para Mejora, Adaptabilidad y Superior
Resultados , que enmarcaron su viaje de veinte años a
Comprender y codificar el Sistema de Producción Toyota.
Había sido uno de los estudiantes de posgrado que voló con
Los ejecutivos de GM visitarán las plantas de Toyota y ayudaron a desarrollar
el kit de herramientas Lean, pero estaba perplejo cuando ninguno de los
38
¶¶ DevOps también extiende y desarrolla las prácticas de infraestructura como código , que fue
promovido por el Dr. Mark Burgess, Luke Kanies y Adam Jacob. En infraestructura como código, el
El trabajo de Operaciones es automatizado y tratado como un código de aplicación, de modo que
Las prácticas de desarrollo se pueden aplicar a todo el flujo de desarrollo. Esto además permitió
flujo de implementación rápido, incluida la integración continua (iniciada por Grady Booch y
integrado como una de las 12 prácticas clave de programación extrema), entrega continua
(promovido por Jez Humble y David Farley), y despliegue continuo (promovido por Etsy,
Wealthfront y el trabajo de Eric Ries en IMVU).
Página 39
1 Entrega y el
ágil,
Tres continuo
maneras
EL VALOR DE FABRICACIÓN
CORRIENTE
Page 40
Page 41
Page 43
Page 44
Página 45
Página 46
The First Way permite un flujo rápido de trabajo de izquierda a derecha desde
Desarrollo a Operaciones al cliente. A fin de que
maximizar el flujo, necesitamos hacer visible el trabajo, reducir nuestro
tamaños de lotes e intervalos de trabajo, calidad de construcción por
Page 47
48
CONCLUSIÓN
*** En adelante, el ingeniero se refiere a cualquier persona que trabaje en nuestro flujo de valor, no solo a los desarrolladores.
Página 49
‡‡‡ En este libro, el término tiempo de proceso se verá favorecido por la misma razón Karen Martin y Mike
Cita de Osterling: “Para minimizar la confusión, evitamos usar el término tiempo de ciclo ya que tiene varios
definiciones sinónimo de tiempo de procesamiento y ritmo o frecuencia de salida, por nombrar algunos ".
2 Laprincipios
Los
Fluir
primera forma:
de
Page 52
Para ayudarnos a ver dónde fluye bien el trabajo y dónde está el trabajo
en cola o estancado, necesitamos hacer nuestro trabajo lo más visible posible.
Uno de los mejores métodos para hacerlo es usar tableros de trabajo visuales,
como tableros kanban o tableros de planificación de sprint, donde podemos
representar el trabajo en tarjetas físicas o electrónicas. El trabajo se origina en
la izquierda (a menudo extraída de una cartera de pedidos), se extrae del trabajo
centro a centro de trabajo (representado en columnas) y termina cuando
llega al lado derecho del tablero, generalmente en una columna etiquetada
"Hecho" o "en producción".
Page 54
establecer qué trabajos deben ejecutarse en función de los pedidos de los clientes,
fechas de vencimiento del pedido, piezas disponibles, etc.
Los estudios han demostrado que el tiempo para completar incluso tareas simples,
como ordenar formas geométricas, se degrada significativamente cuando
multitarea Por supuesto, porque nuestro trabajo en el valor tecnológico
la secuencia es mucho más compleja cognitivamente que la clasificación geométrica
formas, los efectos de la multitarea en el tiempo de proceso son mucho peores.
Por ejemplo, podemos establecer un límite de WIP de tres tarjetas para la prueba.
Cuando ya hay tres cartas en la línea de prueba, no hay cartas nuevas
se puede agregar al carril a menos que se complete o retire una tarjeta
de la columna "en el trabajo" y volver a poner en la cola (es decir, poner
la tarjeta de regreso a la columna a la izquierda). Nada puede ser
Página 55
Page 56
Sin embargo, los tamaños de lotes grandes dan como resultado niveles vertiginosos de WIP
y altos niveles de variabilidad en el flujo que caen en cascada a través del
planta de fabricación completa. El resultado es largos plazos de entrega y pobre
calidad: si se encuentra un problema en un panel de cuerpo, todo el lote
tiene que ser desechado
Supongamos que en nuestro propio ejemplo tenemos diez folletos para enviar y
enviar cada folleto por correo requiere cuatro pasos: doblar el papel, insertar
el papel en el sobre, selle el sobre y selle el
sobre.
Por otro lado, en la estrategia de lotes pequeños (es decir, "pieza única
flujo "), todos los pasos necesarios para completar cada folleto son
realizado secuencialmente antes de comenzar en el próximo folleto. En
En otras palabras, doblamos una hoja de papel, la insertamos en el sobre,
sellarlo y sellarlo; solo entonces comenzamos el proceso de nuevo con
La siguiente hoja de papel.
57
(Fuente: Stefan Luyten, "Flujo de una sola pieza: por qué la producción en masa
no es la forma más eficiente de hacer 'cosas' ”, Medium.com, 8 de agosto,
2014, https://medium.com/@stefanluyten/single-piece-flow-
5d2c2bec845b # .9o7sn74ns .)
Los resultados negativos asociados con grandes tamaños de lote son tan
relevante para el flujo de valor de la tecnología como en la fabricación.
Considere cuándo tenemos un cronograma anual para lanzamientos de software,
donde el código de todo un año que tiene el desarrollo
Trabajado en se lanza a la implementación de producción.
En una publicación sobre Lecciones aprendidas de inicio , Eric Ries afirma: "El lote
el tamaño es la unidad en la que los productos de trabajo se mueven entre etapas en un
proceso de desarrollo [o DevOps]. Para el software, el lote más fácil
para ver es el código. Cada vez que un ingeniero registra el código, son
agrupando una cierta cantidad de trabajo. Hay muchas tecnicas
para controlar estos lotes, que van desde los pequeños lotes
necesario para el despliegue continuo en sucursales más tradicionales
desarrollo basado, donde todo el código de múltiples
los desarrolladores que trabajan durante semanas o meses se agrupan y
integrados juntos ".
Cada vez que el trabajo pasa de un equipo a otro, requerimos todo tipo
de comunicación: solicitud, especificación, señalización, coordinación,
y a menudo priorizando, programando, desconfiando, probando y
verificar Esto puede requerir el uso de diferentes tickets o proyectos
sistemas de gestión; redacción de documentos de especificaciones técnicas;
Page 59
Cada uno de estos pasos es una cola potencial donde el trabajo esperará cuando
confiamos en recursos que se comparten entre diferentes valores
flujos (por ejemplo, operaciones centralizadas). Los plazos de entrega de estos
las solicitudes son a menudo tan largas que hay una escalada constante para tener
trabajo realizado dentro de los plazos necesarios.
60
Página 61
Page 62
Page 63
En espera: cualquier retraso entre trabajos que requiera recursos para esperar
hasta que puedan completar el trabajo actual. Los retrasos aumentan el ciclo
tiempo y evitar que el cliente obtenga valor.
Página 64
CONCLUSIÓN
† Taiichi Ohno comparó el cumplimiento de los límites de WIP con el drenaje de agua del río de inventario para revelar todo
Los problemas que obstruyen el flujo rápido.
‡ También conocido como "tamaño de lote de uno" o "flujo 1x1", términos que se refieren al tamaño de lote y un límite WIP de uno.
§ Aunque la heroicidad no se incluye en las categorías de desechos de Poppendieck, se incluye aquí debido a la frecuencia
ocurre, especialmente en la operación de servicios compartidos.
Página 66
65
Mientras que First Way describe los principios que permiten el flujo rápido de
trabajar de izquierda a derecha, la Segunda Vía describe los principios que
permitir la retroalimentación recíproca rápida y constante de derecha a izquierda
etapas del flujo de valor. Nuestro objetivo es crear un lugar cada vez más seguro y más
sistema de trabajo resistente.
Hacemos que nuestro sistema de trabajo sea más seguro mediante la creación rápida, frecuente y alta
flujo de información de calidad a lo largo de nuestro flujo de valor y nuestro
organización, que incluye retroalimentación y bucles de retroalimentación. Esta
nos permite detectar y remediar problemas mientras son más pequeños,
más barato y más fácil de arreglar; evitar problemas antes de que causen
catástrofe; y crear aprendizaje organizacional que integramos en
trabajo futuro. Cuando ocurren fallas y accidentes, los tratamos como
oportunidades de aprendizaje, en oposición a una causa de castigo y
culpa. Para lograr todo lo anterior, primero exploremos la naturaleza de
sistemas complejos y cómo pueden hacerse más seguros.
Dr. Sidney Dekker, quien también codificó algunos de los elementos clave de seguridad.
cultura, observó otra característica de los sistemas complejos: hacer el
Lo mismo dos veces no conducirá previsiblemente o necesariamente a lo mismo
resultado. Es esta característica que hace listas de verificación estáticas y mejor
prácticas, aunque valiosas, insuficientes para evitar catástrofes
ocurriendo VerApéndice 5.
Página 68
Los líderes crean otros líderes que continuamente hacen crecer este tipo de
capacidades
Se requiere que cada una de estas capacidades trabaje de manera segura en un complejo
sistema. En las siguientes secciones, las dos primeras capacidades y sus
importancia se describen, así como cómo se han creado en
otros dominios y qué prácticas les permiten en el valor tecnológico
corriente. (Las capacidades tercera y cuarta se describen en el capítulo 4).
Página 69
Por el contrario, nuestro objetivo es crear retroalimentación rápida y bucles de avance rápido
dondequiera que se realice el trabajo, en todas las etapas del valor de la tecnología
flujo, que abarca la gestión de productos, desarrollo, control de calidad,
Infosec, y Operaciones. Esto incluye la creación de compilación automatizada,
integración y procesos de prueba, para que podamos detectar inmediatamente cuándo
Se ha introducido un cambio que nos saca de un correcto
estado funcional y desplegable.
También creamos telemetría generalizada para que podamos ver cómo todo nuestro sistema
los componentes operan en el entorno de producción, por lo que
puede detectar rápidamente cuando no están funcionando como se esperaba. Telemetría
Page 70
Page 71
Es solo a través del enjambre de problemas cada vez más pequeños descubiertos
cada vez más temprano en el ciclo de vida que podemos desviar problemas antes de un
Se produce una catástrofe. En otras palabras, cuando el reactor nuclear se derrite
abajo, ya es demasiado tarde para evitar los peores resultados.
Para permitir una retroalimentación rápida en el flujo de valor de la tecnología, debemos crear
el equivalente de un cable Andon y la respuesta de enjambre relacionada.
Esto requiere que también creamos la cultura que lo haga seguro, y
incluso alentado, a tirar del cordón de Andon cuando algo sale mal,
si es cuando ocurre un incidente de producción o cuando ocurren errores
anteriormente en la secuencia de valor, como cuando alguien introduce un cambio
eso rompe nuestros procesos continuos de construcción o prueba.
Cuando las condiciones desencadenan un tirón del cable Andon, enjambramos para resolver el
problema y evitar la introducción de nuevos trabajos hasta que el problema haya
resuelto§ Esto proporciona retroalimentación rápida para todos en el valor
stream (especialmente la persona que causó la falla del sistema), nos permite
para aislar y diagnosticar rápidamente el problema, y evita más
factores complicados que pueden ocultar la causa y el efecto.
Page 72
Esto se puede ver incluso en sistemas más pequeños y menos complejos. Cuando arriba
abajo, los sistemas burocráticos de mando y control se vuelven ineficaces,
generalmente se debe a la diferencia entre "quién debería hacer algo"
y "quién realmente está haciendo algo" es demasiado grande, debido a insuficiente
claridad y actualidad.
Page 73
Utilizamos revisiones por pares de nuestros cambios propuestos para obtener lo que sea
Se necesita garantía de que nuestros cambios funcionarán según lo diseñado. Nosotros
Automatizar la mayor parte del control de calidad que generalmente realiza un control de calidad
o departamento de seguridad de la información como sea posible. En lugar de desarrolladores
necesitando solicitar o programar una prueba para que se ejecute, estas pruebas pueden ser
realizado bajo demanda, permitiendo a los desarrolladores probar rápidamente sus propios
codificar e incluso implementar esos cambios en la producción ellos mismos.
Lean define dos tipos de clientes para los que debemos diseñar:
cliente externo (que probablemente paga por el servicio que somos
entrega) y el cliente interno (que recibe y procesa el
trabajar inmediatamente después de nosotros). Según Lean, nuestro más importante
El cliente es nuestro siguiente paso aguas abajo. Optimizando nuestro trabajo para ellos
requiere que tengamos empatía por sus problemas para mejorar
Identificar los problemas de diseño que impiden un flujo rápido y suave.
CONCLUSIÓN
Las prácticas específicas que permiten un flujo rápido en la secuencia de valor de DevOps
se presentan en la Parte IV. En el próximo capítulo, presentamos la Tercera Vía:
Los principios de retroalimentación
† El Dr. Spear extendió su trabajo para explicar los éxitos duraderos de otras organizaciones, como el proveedor de Toyota
network, Alcoa, y el Programa de Propulsión de Energía Nuclear de la Marina de los EE. UU.
§ Sorprendentemente, cuando el número de tirones del cable Andon disminuye, los gerentes de planta disminuirán las tolerancias para obtener un
aumento en el número de tirones de cable Andon para continuar permitiendo más aprendizajes y mejoras y para
detectar señales de falla cada vez más débiles.
Página 75
el gobierno estaba a tres mil millas de distancia y carecía de conocimiento de primera mano sobre la química local de la tierra, la rocosa
topografía, accesibilidad al agua y otras condiciones, trató de planificar toda la economía agrícola de Georgia. los
Los resultados del intento fueron pésimos y dejaron a Georgia con los niveles más bajos de prosperidad y población en los trece
colonias
4 Los
Laprincipios de
tercera vía:
Aprendizaje continuo
y experimentación
78 de 1189.
Cuando estos accidentes afectan a nuestros clientes, buscamos entender por qué
sucedió. La causa raíz a menudo se considera un error humano, y el
Una respuesta administrativa muy común es "nombre, culpa y vergüenza"
La persona que causó el problema. † Y, ya sea sutil o explícitamente,
la gerencia insinúa que la persona culpable de cometer el error
ser castigado. Luego crean más procesos y aprobaciones para evitar
el error vuelve a suceder.
Dr. Sidney Dekker, quien codificó algunos de los elementos clave de seguridad.
cultura y acuñó el término cultura justa , escribió: "Respuestas a incidentes
y los accidentes que se consideran injustos pueden impedir las investigaciones de seguridad,
Página 79
Promover el miedo en lugar de la atención plena en las personas que son críticas para la seguridad.
trabajar, hacer que las organizaciones sean más burocráticas en lugar de tener más cuidado,
y cultivar el secreto profesional, la evasión y la autoprotección ".
80
Tal como el Dr. Westrum encontró en las organizaciones de atención médica, un grupo de alta confianza,
la cultura generativa también predijo el desempeño de TI y organizacional en
flujos de valor tecnológico.
Por ejemplo, podemos realizar una autopsia sin culpa después de cada
incidente para obtener la mejor comprensión de cómo ocurrió el accidente
y acordar cuáles son las mejores contramedidas para mejorar el
sistema, idealmente evitando que el problema vuelva a ocurrir y
permitiendo una detección y recuperación más rápidas.
Página 81
Muchos de estos atributos también fueron descritos por el Dr. Senge como atributos
de organizaciones de aprendizaje. En La quinta disciplina, escribió que estos
características ayudan a los clientes, aseguran la calidad, crean competitividad
ventaja y una fuerza laboral activa y comprometida, y descubrir el
verdad.
82
O'Neill quería ser notificado dentro de las veinticuatro horas de que alguien
heridos en el trabajo, no para castigar, sino para asegurar y promover eso
se estaban generando e incorporando aprendizajes para crear un lugar más seguro
lugar de trabajo. En el transcurso de diez años, Alcoa redujo su tasa de lesiones
en un 95%.
La reducción en las tasas de lesiones permitió a Alcoa centrarse en los más pequeños
problemas y señales de falla más débiles, en lugar de notificar solo a O'Neill
cuando ocurrieron lesiones, comenzaron a informar también de cualquier llamada cercana. ‡
Al hacer esto, mejoraron la seguridad en el lugar de trabajo sobre el posterior
veinte años y tener uno de los registros de seguridad más envidiable en el
industria.
Como escribe el Dr. Spear, “los alcoanos gradualmente dejaron de trabajar alrededor del
dificultades, inconvenientes e impedimentos que experimentaron.
Afrontamiento, lucha contra incendios y recuperación se fueron reemplazando gradualmente.
en toda la organización mediante una dinámica de identificación de oportunidades
para la mejora de procesos y productos. Como esas oportunidades eran
identificado y los problemas fueron investigados, los focos de ignorancia
que reflejaron se convirtieron en pepitas de conocimiento ". Esta
ayudó a dar a la compañía una mayor ventaja competitiva en el
mercado.
Del mismo modo, en el flujo de valor de la tecnología, a medida que hacemos nuestro sistema de
trabajamos de manera más segura, encontramos y solucionamos problemas de señales de falla cada vez más débiles
Por ejemplo, inicialmente podemos realizar autopsias sin culpa solo para
incidentes que impactan al cliente. Con el tiempo, podemos realizarlos para
incidentes de menor impacto en el equipo y casi accidentes también.
Esto asegura que cuando alguien más haga un trabajo similar, lo haga con
la experiencia acumulativa y colectiva de todos en el
organización que alguna vez ha hecho el mismo trabajo. Un ejemplo notable
de convertir el conocimiento local en conocimiento global es la Marina de los EE. UU.
Programa de propulsión de energía nuclear (también conocido como "NR" para "Naval
Reactores "), que tiene más de 5,700 años de operación sin un
Víctima relacionada con un solo reactor o escape de radiación.
84
Del mismo modo, para reducir el riesgo de que un centro de trabajo caiga debido a
falla de maquinaria, los gerentes pueden aumentar la capacidad comprando más
equipo de capital, contratando a más personas o incluso aumentando el espacio de piso.
Todas estas opciones aumentan los costos.
Page 85
86
¿Qué aprendiste?
Este enfoque de resolución de problemas en el que los líderes ayudan a los trabajadores a ver y
Resolver problemas en su trabajo diario es el núcleo del Toyota
Sistema de producción, de organizaciones de aprendizaje, el Kata de mejora,
y organizaciones de alta confiabilidad. Mike Rother observa que él ve
Toyota "como una organización definida principalmente por el comportamiento único
rutinas que enseña continuamente a todos sus miembros ".
Page 87
CONCLUSIÓN
Page 88
PARTE I CONCLUSIÓN
† El patrón de "nombre, culpa y vergüenza" es parte de la teoría de la mala manzana criticada por el Dr. Sydney Dekker y ampliamente
discutido en su libro The Field Guide to Understanding Human Error.
‡ Es sorprendente, instructivo y realmente conmovedor ver el nivel de convicción y pasión que Paul O'Neill tiene sobre el
Los líderes de responsabilidad moral deben crear seguridad en el lugar de trabajo.
§ Los líderes son responsables del diseño y la operación de procesos en un nivel superior de agregación donde otros tienen menos
perspectiva y autoridad.
Page 8990
Página
'
55 Seleccionar cuál
Flujo de valor para
Empezar con
El escenario para el viaje DevOps de Nordstrom probablemente se estableció en 2011 durante uno de
sus reuniones anuales de la junta directiva. Ese año, uno de los temas estratégicos.
se discutió la necesidad de aumentar los ingresos en línea. Estudiaron la difícil situación de
Blockbusters, Borders y Barnes & Nobles, que demostraron la extrema
consecuencias cuando los minoristas tradicionales llegaron tarde creando e- competitividad
capacidades comerciales: estas organizaciones estaban claramente en riesgo de perder sus
posicionarse en el mercado o incluso cerrar completamente el negocio. †
Page 94
objetivos, estábamos mal equipados para lograr lo que la estrategia comercial de cinco años
requerido por nosotros, ya que Nordstrom comenzó a optimizar la velocidad en lugar de simplemente
optimizando el costo ".
Su primer objetivo era habilitar lanzamientos más rápidos o bajo demanda, proporcionando más rápido
iteración y la capacidad de responder a los comentarios de los clientes. Crearon un
equipo de producto dedicado que se dedicó exclusivamente a brindar soporte para dispositivos móviles
aplicación, con el objetivo de permitir que ese equipo pueda
implementar, probar y entregar valor al cliente. Al hacer esto, no
ya no tiene que depender y coordinarse con los puntajes de otros equipos dentro
Nordstrom Además, pasaron de la planificación una vez al año a un
Proceso de planificación continua. El resultado fue una única acumulación de trabajo priorizada
para la aplicación móvil basada en la necesidad del cliente, ya no existían conflictos
Durante el año siguiente, eliminaron las pruebas como una fase separada del trabajo,
en cambio, integrándolo en el trabajo diario de todos. ‡ Duplicaron las características siendo
entregado por mes y redujo a la mitad el número de defectos, creando un éxito
Salir.
Su segunda área de enfoque fueron los sistemas que respaldan su Café Bistro en la tienda.
restaurantes. A diferencia del flujo de valor de la aplicación móvil donde la necesidad comercial era
Reduzca el tiempo de comercialización y aumente el rendimiento de las funciones, la empresa necesita aquí
fue para disminuir el costo y aumentar la calidad. En 2013, Nordstrom había completado
once "re-conceptos de restaurante" que requirieron cambios en la tienda
aplicaciones, causando una serie de incidentes que impactan al cliente. Inquietantemente
Page 95
habían planeado cuarenta y cuatro más de estos re-conceptos para 2014, cuatro veces más
tantos como en el año anterior.
Como Kissler declaró: “Uno de nuestros líderes empresariales sugirió que tripliquemos nuestro equipo
tamaño para manejar estas nuevas demandas, pero propuse que tuviéramos que dejar de tirar
más cuerpos ante el problema y, en cambio, mejorar la forma en que trabajamos ".
Estos éxitos dieron a los equipos la confianza de que los principios y prácticas de DevOps
eran aplicables a una amplia variedad de flujos de valor. Kissler fue ascendido a vicepresidente de
Comercio electrónico y tecnologías de tienda en 2014.
Page 96
Los proyectos Greenfield DevOps a menudo son pilotos para demostrar la viabilidad del público o
nubes privadas, automatización de despliegue piloto y herramientas similares. Un ejemplo de
un proyecto DevOps greenfield es el producto Hosted LabVIEW en 2009 en National
En el otro extremo del espectro están los proyectos Brownfield DevOps, estos son
Productos o servicios existentes que ya están sirviendo a clientes y tienen
potencialmente ha estado en funcionamiento durante años o incluso décadas. Brownfield proyecta a menudo
vienen con cantidades significativas de deuda técnica, como no tener prueba
automatización o ejecución en plataformas no compatibles. En el ejemplo de Nordstrom
presentado anteriormente en este capítulo, tanto los sistemas de restaurante en la tienda como e-
Los sistemas de comercio eran proyectos brownfield.
Aunque muchos creen que DevOps es principalmente para proyectos nuevos, DevOps
se ha utilizado para transformar con éxito proyectos brownfield de todo tipo. De hecho,
Más del 60% de las historias de transformación compartidas en la Cumbre de DevOps Enterprise
en 2014 fueron para proyectos brownfield. En estos casos, hubo una gran
brecha de rendimiento entre lo que el cliente necesitaba y lo que la organización
actualmente estaba entregando, y las transformaciones de DevOps crearon tremendas
beneficio comercial
Page 97
De hecho, uno de los hallazgos en el Informe sobre el estado de DevOps de 2015 confirmó que
la edad de la aplicación no fue un predictor significativo del rendimiento; en lugar,
lo que predijo el rendimiento fue si la aplicación fue diseñada (o
podría ser rediseñado) para la comprobabilidad y la capacidad de implementación.
Los equipos que apoyan proyectos brownfield pueden ser muy receptivos a experimentar
con DevOps, particularmente cuando existe una creencia generalizada de que
los métodos son insuficientes para lograr sus objetivos, y especialmente si hay un fuerte
sentido de urgencia en torno a la necesidad de mejora. §
98
las transacciones y los datos son primordiales; y sistemas de compromiso , que son
sistemas orientados al cliente o empleados, como los sistemas de comercio electrónico y
aplicaciones de productividad.
Los sistemas de registro suelen tener un ritmo de cambio más lento y a menudo tienen regulaciones
y requisitos de cumplimiento (por ejemplo, SOX). Gartner llama a este tipo de sistemas
"Tipo 1", donde la organización se centra en "hacerlo bien".
Puede ser conveniente dividir nuestros sistemas en estas categorías; Sin embargo, nos
saber que el conflicto central y crónico entre "hacerlo bien" y "hacerlo rápido"
se puede romper con DevOps. Los datos de los informes del estado de DevOps de Puppet Labs
—Siguiendo las lecciones de Lean Manufacturing — muestra que el alto rendimiento
Las organizaciones pueden ofrecer simultáneamente mayores niveles de rendimiento y
fiabilidad.
Además, debido a lo interdependientes que son nuestros sistemas, nuestra capacidad de hacer
los cambios en cualquiera de estos sistemas están limitados por el sistema que es más difícil de
cambiar con seguridad, que casi siempre es un sistema de registro.
En consecuencia, cuando mejoramos los sistemas brownfield, no solo debemos esforzarnos por
reducir su complejidad y mejorar su fiabilidad y estabilidad, también debemos
hacerlos más rápidos, seguros y fáciles de cambiar. Incluso cuando la nueva funcionalidad es
agregados solo a los sistemas de interacción nuevos, a menudo causan confiabilidad
problemas en los sistemas de registro brownfield en los que confían. Al hacer estos
sistemas posteriores más seguros para cambiar, ayudamos a toda la organización más
Alcanzar sus objetivos de forma rápida y segura.
Dentro de cada organización, habrá equipos e individuos con una amplia gama.
de actitudes hacia la adopción de nuevas ideas. Geoffrey A. Moore primero representado
este espectro en forma del ciclo de vida de adopción de tecnología en Crossing The
Page 99
En otras palabras, las nuevas ideas a menudo son rápidamente aceptadas por los innovadores y los primeros
adoptantes, mientras que otros con actitudes más conservadoras se resisten a ellos (los primeros
mayoría , mayoría tardía y rezagados ). Nuestro objetivo es encontrar aquellos equipos que
ya cree en la necesidad de los principios y prácticas de DevOps, y quién posee un
deseo y capacidad demostrada para innovar y mejorar sus propios procesos.
Idealmente, estos grupos serán entusiastas partidarios del viaje de DevOps.
Independientemente de cómo alcancemos nuestro esfuerzo inicial, debemos demostrar las primeras victorias y
Transmitir nuestros éxitos. Hacemos esto rompiendo nuestros objetivos de mejora más grandes
en pequeños pasos incrementales. Esto no solo crea nuestras mejoras más rápido, sino que también
también nos permite descubrir cuándo tomamos la decisión equivocada de flujo de valor:
Al detectar nuestros errores temprano, podemos retroceder rápidamente e intentarlo nuevamente, haciendo
diferentes decisiones armadas con nuestros nuevos aprendizajes.
A medida que generamos éxitos, nos ganamos el derecho de ampliar el alcance de nuestros DevOps
iniciativa. Queremos seguir una secuencia segura que aumente metódicamente nuestros niveles de
credibilidad, influencia y apoyo. La siguiente lista, adaptada de un curso.
impartido por el Dr. Roberto Fernández, profesor de administración William F. Pounds
en MIT, describe las fases ideales utilizadas por los agentes de cambio para construir y expandir
su coalición y base de apoyo:
2. Construir una masa crítica y una mayoría silenciosa: en la siguiente fase, buscamos
expandir las prácticas de DevOps a más equipos y flujos de valor con el objetivo de
creando una base estable de apoyo. Al trabajar con equipos que son receptivos a
nuestras ideas, incluso si no son los grupos más visibles o influyentes, ampliamos
nuestra coalición que está generando más éxitos, creando un "carro"
efecto "que aumenta aún más nuestra influencia. Específicamente evitamos el peligro
batallas políticas que podrían poner en peligro nuestra iniciativa.
Expandir DevOps en una organización no es una tarea pequeña. Puede crear riesgos para
individuos, departamentos y la organización en su conjunto. Pero como Ron van
Kemenade, CIO de ING, quien ayudó a transformar la organización en uno de los
La mayoría de las organizaciones tecnológicas admiradas dijo: "El cambio principal requiere coraje,
especialmente en entornos corporativos donde la gente tiene miedo y pelea contigo. Pero si
comienzas pequeño, realmente no tienes nada que temer. Cualquier líder necesita ser valiente
lo suficiente como para asignar equipos para hacer una toma de riesgos calculada ".
CONCLUSIÓN
Page 101
† Estas organizaciones a veces se conocían como los "Asesinos B que están muriendo".
‡ La práctica de confiar en una fase de estabilización o en una fase de endurecimiento al final de un proyecto a menudo tiene resultados muy pobres, porque significa
Los problemas no se encuentran ni se solucionan como parte del trabajo diario y no se abordan, lo que puede convertirse en problemas más grandes.
§ Que los servicios que tienen el mayor beneficio comercial potencial son sistemas brownfield no debería sorprender. Después de todo, estos son los
sistemas en los que se confía más y tienen el mayor número de clientes existentes o la mayor cantidad de ingresos dependiendo de ellos.
¶ Big Bang, son posibles las transformaciones de arriba hacia abajo, como la transformación Agile en PayPal en 2012 que fue dirigida por su vicepresidente de
tecnología, Kirsten Wolberg. Sin embargo, como con cualquier transformación sostenible y exitosa, esto requirió el más alto nivel de
apoyo administrativo y un enfoque incesante y sostenido para impulsar los resultados necesarios.
Una vez que hemos identificado un flujo de valor al que queremos aplicar los principios de DevOps y
patrones, nuestro siguiente paso es obtener una comprensión suficiente de cómo se entrega el valor a
el cliente: qué trabajo se realiza y por quién, y qué pasos podemos tomar para
mejorar el flujo
El ejemplo favorito de Kissler de las ideas valiosas e inesperadas que pueden provenir de
el mapeo de flujo de valor es cuando intentaron mejorar los largos tiempos de espera asociados con
solicita pasar por la aplicación Cosmetics Business Office, un mainframe COBOL
aplicación que respaldaba a todos los gerentes de piso y departamento de su tienda
departamentos de belleza y cosmética.
Esta aplicación permitió a los gerentes de departamento registrar nuevos vendedores para varios
Kissler explicó:
Página 104
Ella dijo con orgullo: "Con esas mejoras increíbles, todas las demandas para conseguir esto
aplicación fuera de la unidad central desapareció. Además, otros líderes empresariales tomaron
cuenta y comenzó a llegar a nosotros con una lista completa de más experimentos que querían
Conducir con nosotros en sus propias organizaciones. Todos en el negocio y la tecnología.
los equipos estaban entusiasmados con el resultado porque resolvieron un problema comercial real y,
lo más importante, aprendieron algo en el proceso ".
Como demuestra este ejemplo de Nordstrom, en flujos de valor de cualquier complejidad, nadie
la persona conoce todo el trabajo que debe realizarse para crear valor para el
cliente, especialmente porque el trabajo requerido debe ser realizado por muchas personas diferentes
equipos, a menudo muy alejados entre sí en los organigramas, geográficamente o
por incentivos.
Como resultado, después de seleccionar una aplicación o servicio candidato para nuestra iniciativa DevOps,
debemos identificar a todos los miembros de la cadena de valor responsables de trabajar
juntos para crear valor para los clientes que se atienden. En general, esto incluye:
Propietario del producto: la voz interna de la empresa que define el siguiente conjunto de
funcionalidad en el servicio
Page 105
QA: el equipo responsable de garantizar que existan bucles de retroalimentación para garantizar el servicio
funciona como se desee
Después de identificar nuestros miembros de flujo de valor, nuestro siguiente paso es obtener un
Nuestro objetivo no es documentar cada paso y las minucias asociadas, sino lo suficiente
Comprender las áreas de nuestro flujo de valor que ponen en peligro nuestros objetivos de flujo rápido,
cortos plazos de entrega y resultados confiables para el cliente. Idealmente, hemos reunido esos
personas con autoridad para cambiar su parte de la corriente de valor.†
Damon Edwards, coanfitrión del podcast DevOps Café , observó: “En mi experiencia, estos
Los tipos de ejercicios de mapeo de flujo de valor son siempre reveladores. A menudo es el primero
momento en que la gente ve cuánto trabajo y heroicidad se requieren para entregar valor al
cliente. Para Operaciones, puede ser la primera vez que ven las consecuencias que
se produce cuando los desarrolladores no tienen acceso a entornos configurados correctamente, que
contribuye a un trabajo aún más loco durante las implementaciones de código. Para el desarrollo, puede
ser la primera vez que ven todos los heroicos requeridos por Test and Operations para
para implementar su código en producción, mucho después de que marquen una característica como 'completada' ".
Utilizando toda la amplitud de conocimiento aportada por los equipos involucrados en la cadena de valor,
debemos centrar nuestra investigación y escrutinio en las siguientes áreas:
Page 106
Lugares donde el trabajo debe esperar semanas o incluso meses, como ser productivo
entornos, procesos de aprobación de cambios o procesos de revisión de seguridad
Nuestro primer paso para documentar nuestro flujo de valor solo debe consistir en un proceso de alto nivel
bloques Por lo general, incluso para flujos de valor complejos, los grupos pueden crear un diagrama con cinco
a quince bloques de proceso en pocas horas. Cada bloque de proceso debe incluir el plomo
tiempo y tiempo de proceso para procesar un elemento de trabajo, así como el% C / A medido
por los consumidores intermedios de la producción. ‡
Utilizamos las métricas de nuestro mapa de flujo de valor para guiar nuestros esfuerzos de mejora. En el
Ejemplo de Nordstrom, se centraron en las bajas tasas de% C / A en el formulario de solicitud enviado
por gerentes de departamento debido a la ausencia de números de empleados. En otros casos, puede
ser largos tiempos de entrega o bajas tasas de% C / A al entregar una prueba configurada correctamente
entornos para equipos de desarrollo, o podrían ser los largos plazos de entrega necesarios para
ejecutar y pasar pruebas de regresión antes de cada lanzamiento de software.
Una vez que identificamos la métrica que queremos mejorar, debemos realizar el siguiente nivel de
observaciones y mediciones para comprender mejor el problema y luego construir un
Mapa de flujo de valor futuro idealizado, que sirve como una condición objetivo para lograr por algunos
fecha (por ejemplo, generalmente de tres a doce meses).
El liderazgo ayuda a definir este estado futuro y luego guía y permite al equipo
lluvia de ideas hipótesis y contramedidas para lograr la mejora deseada a ese
declarar, realizar experimentos para probar esas hipótesis e interpretar los resultados para
determinar si las hipótesis fueron correctas. Los equipos siguen repitiendo e iterando,
usando cualquier nuevo aprendizaje para informar los próximos experimentos.
Page 107
Uno de los desafíos inherentes a iniciativas como las transformaciones de DevOps es que
inevitablemente están en conflicto con las operaciones comerciales en curso. Parte de esto es natural
resultado de cómo evolucionan las empresas exitosas. Una organización que ha tenido éxito.
por cualquier período extendido de tiempo (años, décadas o incluso siglos) ha creado
Se utilizan muchas técnicas para perpetuar y proteger el funcionamiento de los procesos actuales, como
como especialización, enfoque en eficiencia y repetibilidad, burocracias que imponen
procesos de aprobación y controles para proteger contra la variación. En particular, las burocracias.
son increíblemente resistentes y están diseñados para sobrevivir a condiciones adversas: se puede eliminar
la mitad de los burócratas, y el proceso aún sobrevivirá.
Si bien esto es bueno para preservar el status quo, a menudo necesitamos cambiar la forma en que trabajamos para
adaptarse a las condiciones cambiantes en el mercado. Hacer esto requiere interrupción y
innovación, lo que nos pone en desacuerdo con los grupos que actualmente son responsables diariamente
operaciones y las burocracias internas, y quién casi siempre ganará.
En su libro The Other Side of Innovation: Solving the Execution Challenge, Dr. Vijay
Govindarajan y el Dr. Chris Trimble, ambos miembros de la facultad de Tuck de Dartmouth College
School of Business, describió sus estudios sobre cómo se logra la innovación disruptiva
a pesar de estas poderosas fuerzas de las operaciones diarias. Documentaron cómo el cliente
los productos de seguros de automóviles impulsados se desarrollaron y comercializaron con éxito en Allstate,
cómo se creó el rentable negocio de publicación digital en el Wall Street Journal ,
el desarrollo de la innovadora zapatilla de trail running en Timberland, y el
desarrollo del primer coche eléctrico en BMW.
Con base en su investigación, el Dr. Govindarajan y el Dr. Trimble afirman que las organizaciones
necesita crear un equipo de transformación dedicado que pueda operar fuera del resto
de la organización responsable de las operaciones diarias (que llaman
"Equipo dedicado" y "motor de rendimiento" respectivamente).
Asigne miembros del equipo dedicado para que se asignen únicamente a DevOps
esfuerzos de transformación (en lugar de "mantener todas sus responsabilidades actuales, pero
dedica el 20% de tu tiempo a esta nueva cosa de DevOps ").
Seleccione miembros del equipo que sean generalistas, que tengan habilidades en una amplia variedad de
dominios
Seleccionar miembros del equipo que tengan relaciones duraderas y de respeto mutuo.
con el resto de la organización.
Cree un espacio físico separado para el equipo dedicado, si es posible, para maximizar
flujo de comunicación dentro del equipo, y creando cierto aislamiento del resto del
organización.
108
Crear un equipo dedicado no solo es bueno para el equipo, sino también bueno para el
motor de rendimiento. Al crear un equipo separado, creamos el espacio para que ellos puedan
experimentar con nuevas prácticas, protegiendo al resto de la organización del potencial
interrupciones y distracciones asociadas con él.
Estos objetivos y el plazo deben ser acordados por los ejecutivos y conocidos por
todos en la organización. También queremos limitar el número de estos tipos de
iniciativas que se llevan a cabo simultáneamente para evitar que gravemos demasiado la organización
cambiar la capacidad de gestión de los líderes y la organización. Ejemplos de mejora
los objetivos pueden incluir:
Asegúrese de que el tiempo de espera desde el registro del código hasta el lanzamiento de producción sea de una semana o menos para el 95%
de cambios
Asegúrese de que los lanzamientos siempre se puedan realizar durante el horario comercial normal con cero
falta del tiempo.
Una vez que se aclara el objetivo de alto nivel, los equipos deben decidir una cadencia regular para conducir
El trabajo de mejora. Al igual que el trabajo de desarrollo de productos, queremos trabajo de transformación
para hacerse de manera iterativa e incremental. Una iteración típica estará en el rango de
De dos a cuatro semanas. Para cada iteración, los equipos deben acordar un pequeño conjunto de objetivos que
genera valor y progresa hacia la meta a largo plazo. Al final de cada
iteración, los equipos deben revisar su progreso y establecer nuevas metas para la próxima iteración.
Aprendizaje más rápido generado desde la primera iteración, lo que significa una integración más rápida de nuestro
aprendizajes en la próxima iteración
Realización más rápida de mejoras que marcan diferencias significativas en nuestro diario
trabajo
Menos riesgo de que nuestro proyecto sea eliminado antes de que podamos generar resultados demostrables
Las organizaciones que luchan con la deuda financiera solo hacen pagos de intereses y nunca
reducir el capital del préstamo, y eventualmente pueden encontrarse en situaciones donde
ya no puede atender los pagos de intereses. Del mismo modo, las organizaciones que no pagan
la deuda técnica puede verse tan cargada de soluciones diarias para los problemas restantes
sin reparar que ya no pueden completar ningún trabajo nuevo. En otras palabras, ahora son
solo haciendo el pago de intereses sobre su deuda técnica.
Gestionaremos activamente esta deuda técnica asegurándonos de invertir al menos el 20% de todos
Ciclos de desarrollo y operaciones de refactorización, inversión en trabajos de automatización y
arquitectura y requisitos no funcionales (NFR, a veces referidos como
"Ilities"), como mantenibilidad, manejabilidad, escalabilidad, confiabilidad, comprobabilidad,
implementabilidad y seguridad.
Figura 11: Invierta el 20% de los ciclos en aquellos que crean un valor positivo, invisible para el usuario
(Fuente: "Aprendizaje automático y deuda técnica con D. Sculley", Software Engineering Daily
podcast, 17 de noviembre de 2015, http://softwareengineeringdaily.com/2015/11/17/machine-
aprendizaje-y-técnico-deuda-con-d-sculley / .)
Después de la experiencia cercana a la muerte de eBay a fines de la década de 1990, Marty Cagan, autor de
Inspirado: Cómo crear productos que los clientes adoren, el libro seminal sobre diseño de productos
y gestión, codificó la siguiente lección:
Cagan señala que cuando las organizaciones no pagan su "impuesto del 20%", la deuda técnica lo hará
aumentar hasta el punto en que una organización gasta inevitablemente todos sus ciclos pagando
abajo de la deuda técnica. En algún momento, los servicios se vuelven tan frágiles que la entrega de funciones
se detiene porque todos los ingenieros están trabajando en problemas de confiabilidad o trabajando
alrededor de los problemas
Al dedicar el 20% de nuestros ciclos para que Dev y Ops puedan crear contramedidas duraderas
A los problemas que encontramos en nuestro trabajo diario, nos aseguramos de que la deuda técnica no
impedir nuestra capacidad de desarrollar y operar nuestros servicios en producción de manera rápida y segura.
Caso de estudio
Operation InVersion en LinkedIn (2011)
Operation InVersion de LinkedIn presenta un interesante caso de estudio que ilustra
La necesidad de pagar la deuda técnica como parte del trabajo diario. Seis meses después de su
IPO exitosa en 2011, LinkedIn continuó luchando con problemas
implementaciones que se volvieron tan dolorosas que lanzaron Operation InVersion,
donde detuvieron todo el desarrollo de características durante dos meses para revisar
sus entornos informáticos, implementaciones y arquitectura.
Página 111
LinkedIn fue creado en 2003 para ayudar a los usuarios a "conectarse a su red para un mejor trabajo
oportunidades ". Al final de su primera semana de operaciones, tenían 2.700 miembros.
Un año después, tenían más de un millón de miembros y crecieron exponencialmente.
desde entonces. Para noviembre de 2015, LinkedIn tenía más de 350 millones de miembros, que
generar decenas de miles de solicitudes por segundo, lo que resulta en millones de consultas
por segundo en los sistemas de back-end de LinkedIn.
Para 2010, la mayoría de los nuevos desarrollos ocurrían en nuevos servicios, con casi uno
Cien servicios que se ejecutan fuera de Leo. El problema era que Leo solo era
desplegarse una vez cada dos semanas.
Josh Clemm, gerente senior de ingeniería en LinkedIn, explicó que para 2010,
La empresa tenía problemas importantes con Leo. A pesar de escalar verticalmente
Leo al agregar memoria y CPU, "Leo a menudo bajaba en producción, era
difícil de solucionar y recuperar, y difícil de liberar nuevo código ... Estaba claro
necesitábamos 'matar a Leo' y dividirlo en muchos pequeños funcionales y apátridas
servicios."
Scott lanzó Operation InVersion como una forma de "inyectar los inicios de una cultura
manifiesto en la cultura de ingeniería de su equipo. No habría una nueva característica
desarrollo hasta que se modernizó la arquitectura informática de LinkedIn, eso es lo que
los negocios y su equipo lo necesitaban ".
Scott describió una desventaja: "Haz público, tienes todo el mundo mirándote,
y luego le decimos a la gerencia que no vamos a entregar nada nuevo mientras todos
de trabajos de ingeniería en este proyecto [InVersion] para los próximos dos meses. Era un
cosa aterradora ".
Sin embargo, Vance describió los resultados masivamente positivos de Operation InVersion.
"LinkedIn creó un conjunto completo de software y herramientas para ayudarlo a desarrollar código para
el sitio. En lugar de esperar semanas para que sus nuevas funciones lleguen a
El sitio principal de LinkedIn, los ingenieros podrían desarrollar un nuevo servicio, tener una serie de
los sistemas automatizados examinan el código en busca de errores y problemas que el servicio pueda
112
interactuar con las funciones existentes y lanzarlo directamente al sitio de LinkedIn en vivo ...
El cuerpo de ingeniería de LinkedIn [ahora] realiza importantes actualizaciones al sitio tres veces
un día." Al crear un sistema de trabajo más seguro, el valor que crearon incluyó menos
sesiones nocturnas de hacinamiento, con más tiempo para desarrollar características nuevas e innovadoras.
Como Josh Clemm describió en su artículo sobre el escalado en LinkedIn, "el escalado puede ser
medido en muchas dimensiones, incluida la organización ... [Operación
InVersion] permitió a toda la organización de ingeniería centrarse en mejorar
herramientas e implementación, infraestructura y productividad del desarrollador. Era
exitosos en permitir la agilidad de ingeniería, necesitamos construir el nuevo escalable
productos que tenemos hoy ... [En] 2010, ya teníamos más de 150 servicios separados.
Hoy tenemos más de 750 servicios ".
Kevin Scott declaró: “Tu trabajo como ingeniero y tu propósito como tecnología
El equipo es ayudar a su empresa a ganar. Si lideras un equipo de ingenieros, es mejor
tomar la perspectiva de un CEO. Su trabajo es descubrir qué es lo que su empresa,
necesita su negocio, su mercado, su entorno competitivo. Aplicar eso
a su equipo de ingeniería para que su empresa gane ".
Al permitir que LinkedIn pague casi una década de deuda técnica, Project
InVersion permitió estabilidad y seguridad, al tiempo que estableció la siguiente etapa de crecimiento para el
empresa. Sin embargo, requirió dos meses de enfoque total en no funcional
requisitos, a expensas de todas las funciones prometidas hechas al público
La siguiente sección discute patrones que pueden ayudar a crear visibilidad y alineación
entre equipos y funciones.
Como Christopher Little, un ejecutivo de software y uno de los primeros cronistas de DevOps,
observó: “Los antropólogos describen las herramientas como un artefacto cultural. Cualquier discusión sobre cultura
después de la invención del fuego también debe tratarse de herramientas ". Del mismo modo, en el valor DevOps
Stream, utilizamos herramientas para reforzar nuestra cultura y acelerar los cambios de comportamiento deseados.
Un objetivo es que nuestras herramientas refuercen que Desarrollo y Operaciones no solo tienen
objetivos compartidos, pero tienen un trabajo atrasado común, idealmente almacenado en un trabajo común
sistema y usando un vocabulario compartido, para que el trabajo pueda ser priorizado globalmente.
Al hacer esto, Desarrollo y Operaciones pueden terminar creando una cola de trabajo compartida,
en lugar de que cada silo use uno diferente (por ejemplo, Desarrollo usa JIRA mientras que Operaciones
113
usa ServiceNow). Un beneficio significativo de esto es que cuando los incidentes de producción son
mostrado en los mismos sistemas de trabajo que el trabajo de desarrollo, será obvio cuando esté en curso
los incidentes deberían detener otro trabajo, especialmente cuando tenemos una junta kanban.
Otras tecnologías que refuerzan los objetivos compartidos son las salas de chat, como los canales IRC,
HipChat, Campfire, Slack, Flowdock y OpenFire. Las salas de chat permiten compartir rápidamente
información (en lugar de completar formularios que se procesan a través de predefinidos
flujos de trabajo), la capacidad de invitar a otras personas según sea necesario y registros de historial que son
Sin embargo, el entorno de comunicación rápida facilitado por las salas de chat también puede ser un
retirarse. Como Ryan Martens, el fundador y CTO de Rally Software, observa: "En un chat
habitación, si alguien no recibe una respuesta en un par de minutos, es totalmente aceptado y
esperaba que puedas volver a molestarlos hasta que obtengan lo que necesitan ".
Las expectativas de respuesta inmediata pueden, por supuesto, conducir a resultados no deseados. UN
El aluvión constante de interrupciones y preguntas puede evitar que las personas
trabajo necesario hecho. Como resultado, los equipos pueden decidir que ciertos tipos de solicitudes deberían
pasar por herramientas más estructuradas y asincrónicas.
CONCLUSIÓN
En este capítulo, identificamos a todos los equipos que respaldan nuestro flujo de valor y los capturamos en
un mapa de flujo de valor qué trabajo se requiere para entregar valor al cliente. los
El mapa de flujo de valor proporciona la base para comprender nuestro estado actual, incluido nuestro
tiempo de entrega y métricas de% C / A para áreas problemáticas, e informa cómo establecemos un futuro
estado.
Esto permite a los equipos de transformación dedicados iterar y experimentar rápidamente para
mejorar el rendimiento. También nos aseguramos de asignar una cantidad de tiempo suficiente para
mejora, solucionando problemas conocidos y problemas arquitectónicos, incluyendo nuestros
requerimientos funcionales. Los estudios de caso de Nordstrom y LinkedIn demuestran
cómo se pueden hacer mejoras dramáticas en los plazos y la calidad cuando encontramos
problemas en nuestro flujo de valor y pagar deuda técnica.
† Lo que hace que sea aún más importante que limitemos el nivel de detalle que se recopila: el tiempo de todos es valioso y escaso.
114
• Por el contrario, hay muchos ejemplos de uso de herramientas de una manera que garantiza que no ocurran cambios de comportamiento. Por ejemplo, una organización se compromete a un
herramienta de planificación ágil, pero luego la configura para un proceso en cascada, que simplemente mantiene el status quo.
En los capítulos anteriores, identificamos un flujo de valor para comenzar nuestra transformación DevOps
y estableció objetivos y prácticas compartidas para permitir que un equipo de transformación dedicado a
Mejorar la forma en que entregamos valor al cliente.
En este capítulo, comenzaremos a pensar en cómo organizarnos para lograr mejor nuestro
objetivos de flujo de valor. Después de todo, cómo organizamos nuestros equipos afecta cómo realizamos nuestro trabajo.
El Dr. Melvin Conway realizó un famoso experimento en 1968 con una investigación por contrato.
organización que tenía ocho personas encargadas de producir un COBOL y un
Compilador ALGOL. Observó: "Después de algunas estimaciones iniciales de dificultad y tiempo, cinco
las personas fueron asignadas al trabajo de COBOL y tres al trabajo de ALGOL. El COBOL resultante
el compilador se ejecutó en cinco fases, el compilador ALGOL se ejecutó en tres ".
Estas observaciones condujeron a lo que ahora se conoce como la Ley de Conway, que establece que
"Las organizaciones que diseñan sistemas ... están obligadas a producir diseños que son copias
de las estructuras de comunicación de estas organizaciones ... Cuanto más grande es una organización, más
menos flexibilidad tiene y más pronunciado es el fenómeno ". Eric S. Raymond, autor
del libro La catedral y el bazar: reflexiones sobre Linux y código abierto por un
Accidental Revolutionary , creó una versión simplificada (y ahora más famosa) de
Ley de Conway en su archivo de jerga: "La organización del software y la organización de
el equipo de software será congruente; comúnmente indicado como 'si tienes cuatro grupos trabajando
en un compilador, obtendrás un compilador de 4 pasadas ".
En otras palabras, cómo organizamos nuestros equipos tiene un poderoso efecto en el software que
producir, así como nuestros resultados arquitectónicos y de producción resultantes. Para obtener
Flujo rápido de trabajo desde el desarrollo hasta las operaciones, con alta calidad y excelente cliente
resultados, debemos organizar nuestros equipos y nuestro trabajo para que la Ley de Conway funcione para nuestros
ventaja. Si se hace mal, la Ley de Conway evitará que los equipos trabajen de manera segura y
independientemente; en cambio, estarán estrechamente unidos, todos esperándose el uno al otro
trabajo por hacer, incluso con pequeños cambios que crean catástrofes potencialmente globales
Consecuencias.
Un ejemplo de cómo la Ley de Conway puede impedir o reforzar nuestros objetivos se puede ver en un
tecnología desarrollada en Etsy llamada Sprouter. El viaje de DevOps de Etsy comenzó en
2009, y es una de las organizaciones DevOps más admiradas, con ingresos en 2014 de casi
$ 200 millones y una OPV exitosa en 2015.
enrutador ", fue diseñado originalmente para ayudar a facilitar la vida de los desarrolladores y la base de datos
equipos Como dijo Ross Snyder, ingeniero senior en Etsy, durante su presentación en Surge
2011, "Sprouter fue diseñado para permitir que los equipos de desarrollo escriban código PHP en la aplicación,
los DBA para escribir SQL dentro de Postgres, con Sprouter ayudándolos a encontrarse en el medio ".
Además, los procedimientos almacenados de la base de datos estaban estrechamente acoplados a Sprouter, en cualquier momento
se cambió el procedimiento, también requirió cambios en Sprouter. El resultado fue que Sprouter
se convirtió en un único punto de falla cada vez más grande. Snyder explicó que todo era tan
estrechamente acoplado y requirió un nivel tan alto de sincronización como resultado, que casi
cada despliegue causó una mini interrupción.
Se pueden explicar tanto los problemas asociados con Sprouter como su eventual solución.
por la ley de Conway. Etsy inicialmente tenía dos equipos, los desarrolladores y los DBA, que eran
cada uno responsable de dos capas del servicio, la capa lógica de la aplicación y almacenada
capa de procedimiento Dos equipos trabajando en dos capas, como predice la Ley de Conway. Sprouter fue
pretendía facilitar la vida de ambos equipos, pero no funcionó como se esperaba, cuando los negocios
las reglas cambiaron, en lugar de cambiar solo dos capas, ahora necesitaban hacer cambios en
tres capas (en la aplicación, en los procedimientos almacenados y ahora en Sprouter). los
Los desafíos resultantes de coordinar y priorizar el trabajo en tres equipos significativamente
aumentaron los tiempos de entrega y causaron problemas de confiabilidad.
En la primavera de 2009, como parte de lo que Snyder llamó "el gran cultural de Etsy
transformación ", se unió Chad Dickerson como su nuevo CTO. Dickerson se puso en movimiento
muchas cosas, incluida una inversión masiva en la estabilidad del sitio, hacer que los desarrolladores realicen
sus propios despliegues en producción, así como comenzar un viaje de dos años para
Eliminar Sprouter.
Para hacer esto, el equipo decidió mover toda la lógica empresarial de la capa de base de datos al
capa de aplicación, eliminando la necesidad de Sprouter. Crearon un pequeño equipo que escribió un
Capa de mapeo relacional de objetos PHP (ORM),† permitiendo a los desarrolladores front-end hacer
llama directamente a la base de datos y reduce la cantidad de equipos necesarios para cambiar
lógica de negocios desde tres equipos hasta un equipo.
Como describió Snyder, “Comenzamos a usar el ORM para cualquier área nueva del sitio y
118
para migrar todo el sitio fuera de Sprouter. Y a pesar de que todos nos quejamos de Sprouter
todo el tiempo, se mantuvo en producción en todo momento ".
Al eliminar Sprouter, también eliminaron los problemas asociados con múltiples equipos
necesidad de coordinar cambios de lógica de negocios, disminución del número de traspasos y
aumentó significativamente la velocidad y el éxito de las implementaciones de producción, mejorando el sitio
estabilidad. Además, debido a que los equipos pequeños podrían desarrollar e implementar independientemente
código sin requerir que otro equipo realice cambios en otras áreas del sistema,
La productividad del desarrollador aumentó.
Como Snyder y Etsy experimentaron, cómo diseñamos nuestra organización dicta cómo es el trabajo
realizado, y, por lo tanto, los resultados que logramos. Durante el resto de este capítulo, nosotros
explorará cómo la Ley de Conway puede afectar negativamente el rendimiento de nuestro flujo de valor,
y, lo que es más importante, cómo organizamos nuestros equipos para utilizar la Ley de Conway en nuestro beneficio.
ARQUETÍAS ORGANIZACIONALES
En el campo de las ciencias de decisión, existen tres tipos principales de estructuras organizativas.
que informan cómo diseñamos nuestros flujos de valor DevOps teniendo en cuenta la Ley de Conway:
funcional , matriz y mercado . Los define el Dr. Roberto Fernández de la siguiente manera:
Las organizaciones orientadas a la funcionalidad optimizan la experiencia, la división del trabajo o la reducción
costo. Estas organizaciones centralizan la experiencia, lo que ayuda a permitir el crecimiento profesional y
desarrollo de habilidades, y a menudo tienen estructuras organizativas jerárquicas altas. Esto tiene
ha sido el método predominante de organización para Operaciones (es decir, administradores de servidores, redes
administradores, administradores de bases de datos, etc., están organizados en grupos separados).
Las organizaciones orientadas al mercado optimizan para responder rápidamente a las necesidades del cliente.
Estas organizaciones tienden a ser planas, compuestas de múltiples disciplinas multifuncionales
(por ejemplo, marketing, ingeniería, etc.), que a menudo conducen a posibles redundancias en
la organización. Así es como operan muchas organizaciones prominentes que adoptan DevOps
Con estas tres categorías de organizaciones en mente, exploremos más a fondo cómo
La orientación funcional, especialmente en las operaciones, puede causar resultados no deseados en el
flujo de valor tecnológico, como predeciría la Ley de Conway.
Page 119
En las organizaciones tradicionales de operaciones de TI, a menudo utilizamos orientación funcional para organizar
nuestros equipos por sus especialidades. Ponemos a los administradores de la base de datos en un grupo, el
administradores de red en otro, los administradores del servidor en un tercero, y así sucesivamente. Uno
Una de las consecuencias más visibles de esto son los largos plazos de entrega, especialmente para actividades complejas.
como implementaciones grandes donde debemos abrir tickets con múltiples grupos y coordinar
transferencias de trabajo, lo que resulta en nuestro trabajo esperando en largas colas en cada paso.
Para agravar el problema, la persona que realiza el trabajo a menudo tiene poca visibilidad o
comprensión de cómo su trabajo se relaciona con cualquier objetivo de flujo de valor (por ejemplo, "Solo soy
configurando servidores porque alguien me lo dijo "). Esto coloca a los trabajadores en una creatividad y
vacío de motivación
El problema se exacerba cuando cada área funcional de Operaciones tiene que servir a múltiples
flujos de valor (es decir, múltiples equipos de desarrollo) que compiten por sus escasos ciclos. En
Para que los equipos de desarrollo realicen su trabajo de manera oportuna, a menudo tenemos que
escalar problemas a un gerente o director, y eventualmente a alguien (generalmente un ejecutivo)
quien finalmente puede priorizar el trabajo contra los objetivos organizacionales globales en lugar de
objetivos funcionales del silo. Esta decisión debe luego caer en cascada en cada una de las funciones
áreas para cambiar las prioridades locales, y esto, a su vez, ralentiza a otros equipos. Cuando cada
equipo agiliza su trabajo, el resultado neto es que cada proyecto termina moviéndose al mismo
lento arrastre
Además de las largas colas y los largos plazos de entrega, esta situación resulta en transferencias pobres, grandes
cantidades de reelaboración, problemas de calidad, cuellos de botella y demoras. Este embotellamiento impide la
logro de objetivos organizacionales importantes, que a menudo superan con creces el deseo de
reducir costos. ¶
Del mismo modo, la orientación funcional también se puede encontrar con QA centralizado e Infosec
funciones, que pueden haber funcionado bien (o al menos, lo suficientemente bien) al realizar menos
lanzamientos frecuentes de software. Sin embargo, a medida que aumentamos el número de equipos de desarrollo
y sus frecuencias de despliegue y lanzamiento, la mayoría de las organizaciones orientadas funcionalmente
En términos generales, para lograr los resultados de DevOps, necesitamos reducir los efectos de
orientación ("optimización de costos") y permitir la orientación del mercado ("optimización de velocidad")
para que podamos tener muchos equipos pequeños trabajando de forma segura e independiente, entregando rápidamente
valor para el cliente.
Llevado al extremo, los equipos orientados al mercado son responsables no solo de la función
desarrollo, pero también para probar, asegurar, implementar y respaldar su servicio en
producción, desde la concepción de la idea hasta la jubilación. Estos equipos están diseñados para ser cruzados
120
Para lograr la orientación al mercado, no haremos una gran reorganización de arriba hacia abajo, que a menudo
crea grandes cantidades de interrupción, miedo y parálisis. En su lugar, integraremos el
ingenieros funcionales y habilidades (por ejemplo, Ops, QA, Infosec) en cada equipo de servicio, o proporcionar
sus capacidades a los equipos a través de plataformas automáticas de autoservicio que brindan
entornos similares a la producción, iniciar pruebas automatizadas o realizar implementaciones.
Esto permite que cada equipo de servicio brinde valor de forma independiente al cliente sin
tener que abrir tickets con otros grupos, como IT Operations, QA o Infosec. ** **
Izquierda: orientación funcional: todo el trabajo fluye a través de operaciones de TI centralizadas; Derecha: mercado
orientación: todos los equipos de productos pueden implementar sus componentes de autoservicio sueltos en
producción. (Fuente: Humble, Molesky y O'Reilly, Lean Enterprise , edición Kindle, 4523 y
4592.)
Lo que estas organizaciones tienen en común es una cultura de alta confianza que permite a todos
departamentos para trabajar juntos de manera efectiva, donde todo el trabajo tiene prioridad transparente y
Page 121
hay suficiente holgura en el sistema para permitir que el trabajo de alta prioridad se complete rápidamente.
Esto es, en parte, habilitado por plataformas automáticas de autoservicio que incorporan calidad en el
productos que todos están construyendo.
En el movimiento de manufactura esbelta de la década de 1980, muchos investigadores quedaron perplejos por
La orientación funcional de Toyota, que estaba en desacuerdo con la mejor práctica de tener cross-
equipos funcionales, orientados al mercado. Estaban tan perplejos que se llamó "el segundo Toyota
paradoja."
Como Mike Rother escribió en Toyota Kata : "Por tentador que parezca, uno no puede reorganizarse
su camino hacia la mejora continua y la adaptabilidad. Lo decisivo no es la forma de
la organización, pero cómo las personas actúan y reaccionan. Las raíces del éxito de Toyota no radican en su
estructuras organizativas, pero en el desarrollo de capacidades y hábitos en su gente. Sorprende
mucha gente, de hecho, para encontrar que Toyota está en gran medida organizada en un tradicional, funcional-
estilo departamento ". Es este desarrollo de hábitos y capacidades en las personas y el
mano de obra que es el foco de nuestras próximas secciones.
Esto significa que el problema más urgente del día puede ser trabajar o implementar un
característica del cliente o reparación de un incidente de producción de Gravedad 1. Alternativamente, el día puede
requieren revisar el cambio de un compañero ingeniero, aplicando parches de seguridad de emergencia para
servidores de producción o mejoras para que los compañeros ingenieros sean más productivos.
Reflexionando sobre objetivos compartidos entre Desarrollo y Operaciones, Jody Mulkey, CTO en
Ticketmaster dijo: "Durante casi 25 años, utilicé una metáfora del fútbol americano para describir
Dev y Ops. Sabes, Ops es defensa, quien evita que el otro equipo anote, y Dev es
ofensiva, tratando de marcar goles. Y un día, me di cuenta de cuán defectuosa era esta metáfora,
porque nunca todos juegan en el campo al mismo tiempo. En realidad no están en el mismo
¡equipo!"
Él continuó: "La analogía que uso ahora es que Ops son los linieros ofensivos, y Dev son
las posiciones de 'habilidad' (como el mariscal de campo y los receptores abiertos) cuyo trabajo es mover el
bola abajo en el campo: el trabajo de Ops es ayudar a garantizar que Dev tenga suficiente tiempo para
ejecutar las jugadas ".
Un ejemplo sorprendente de cómo el dolor compartido puede reforzar los objetivos compartidos es cuando Facebook fue
experimentando un enorme crecimiento en 2009. Experimentaban problemas significativos
relacionado con las implementaciones de código, aunque no todos los problemas causaron problemas que afectan al cliente, hay
Fue crónico de extinción de incendios y largas horas. Pedro Canahuati, su director de producción.
ingeniería, describió una reunión llena de ingenieros de operaciones donde alguien preguntó que todos
las personas que no trabajan en un incidente cierran sus computadoras portátiles y nadie puede hacerlo.
Una de las cosas más importantes que hicieron para ayudar a cambiar los resultados de las implementaciones
era hacer que todos los ingenieros, gerentes de ingeniería y arquitectos de Facebook rotaran
Page 122
servicio de guardia por los servicios que construyeron. Al hacer esto, todos los que trabajaron en el servicio
retroalimentación visceral experimentada sobre las decisiones arquitectónicas y de codificación aguas arriba que
hecho, lo que tuvo un enorme impacto positivo en los resultados posteriores.
Debido a que confiamos en un número cada vez mayor de tecnologías, debemos tener ingenieros
que se han especializado y logrado el dominio en las áreas tecnológicas que necesitamos. Sin embargo, nos
no quieren crear especialistas que estén "congelados en el tiempo", que solo comprendan y puedan
contribuir a esa área del flujo de valor.
Una contramedida es permitir y alentar a cada miembro del equipo a ser generalista. Nosotros
haga esto proporcionando oportunidades para que los ingenieros aprendan todas las habilidades necesarias para construir
y ejecutar los sistemas de los que son responsables y rotar regularmente a las personas
diferentes roles El término ingeniero de pila completa ahora se usa comúnmente (a veces como un rico
fuente de parodia) para describir a los generalistas que están familiarizados, al menos tienen un nivel general de
comprensión: con toda la pila de aplicaciones (por ejemplo, código de aplicación, bases de datos,
sistemas operativos, redes, nube).
Tabla 2: Especialistas vs. Generalistas vs. Personal "en forma de E" (experiencia, pericia, exploración y
ejecución)
Scott Prugh escribe que CSG International ha sufrido una transformación que trae
La mayoría de los recursos necesarios para compilar y ejecutar el producto en un equipo, incluido el análisis,
arquitectura, desarrollo, prueba y operaciones. "Por entrenamiento cruzado y crecimiento
123
habilidades de ingeniería, los generalistas pueden hacer mucho más trabajo que sus especialistas
contrapartes, y también mejora nuestro flujo general de trabajo al eliminar colas y esperar
hora." Este enfoque está en desacuerdo con las prácticas de contratación tradicionales, pero, como explica Prugh,
vale la pena "Los gerentes tradicionales a menudo se opondrán a contratar ingenieros con generalistas
conjuntos de habilidades, argumentando que son más caros y que 'puedo contratar dos servidores
Cuando valoramos a las personas simplemente por sus habilidades o desempeño existentes en su rol actual
en lugar de por su capacidad de adquirir y desplegar nuevas habilidades, nosotros (a menudo inadvertidamente)
Reforzar lo que la Dra. Carol Dweck describe como la mentalidad fija , donde las personas ven sus
inteligencia y habilidades como "donaciones" estáticas que no se pueden cambiar de manera significativa.
En cambio, queremos fomentar el aprendizaje, ayudar a las personas a superar la ansiedad de aprendizaje, ayudar
asegúrese de que las personas tengan habilidades relevantes y una hoja de ruta profesional definida, y así sucesivamente. Por
Al hacer esto, ayudamos a fomentar una mentalidad de crecimiento en nuestros ingenieros, después de todo, un aprendizaje
La organización requiere personas que estén dispuestas a aprender. Al alentar a todos a aprender, como
además de brindar capacitación y apoyo, creamos los más sostenibles y menos costosos
forma de crear grandeza en nuestros equipos, invirtiendo en el desarrollo de las personas que
ya tengo.
Como Jason Cox, Director de Ingeniería de Sistemas en Disney, describió: "Dentro de las operaciones,
tuvimos que cambiar nuestras prácticas de contratación. Buscamos personas que tuvieran 'curiosidad, coraje,
y franqueza, 'que no solo eran capaces de ser generalistas sino también renegados ... Queremos
para promover la interrupción positiva para que nuestro negocio no se atasque y pueda pasar a la
futuro." Como veremos en la siguiente sección, cómo financiamos a nuestros equipos también afecta nuestros resultados.
Otra forma de permitir resultados de alto rendimiento es crear equipos de servicio estables con
financiación continua para ejecutar su propia estrategia y hoja de ruta de iniciativas. Estos equipos
tienen los ingenieros dedicados necesarios para cumplir con los compromisos concretos contraídos a nivel interno
y clientes externos, como características, historias y tareas.
Compare esto con el modelo más tradicional donde los equipos de Desarrollo y Prueba son
asignado a un "proyecto" y luego reasignado a otro proyecto tan pronto como el proyecto esté
completado y se agota el financiamiento. Esto conduce a todo tipo de resultados no deseados, incluidos
los desarrolladores no pueden ver las consecuencias a largo plazo de las decisiones que toman (un formulario
de retroalimentación) y un modelo de financiación que solo valora y paga las primeras etapas de la
ciclo de vida del software, que, trágicamente, es también la parte menos costosa para productos exitosos
o servicios.††
Nuestro objetivo con un modelo de financiación basado en productos es valorar el logro de la organización
y resultados del cliente, como ingresos, valor de por vida del cliente o adopción del cliente
tasa, idealmente con el mínimo de salida (por ejemplo, cantidad de esfuerzo o tiempo, líneas de código).
Compare esto con la forma en que se miden los proyectos, por ejemplo, si se completó
dentro del presupuesto prometido, el tiempo y el alcance.
Page 124
A medida que las organizaciones crecen, uno de los mayores desafíos es mantenerse eficaz
comunicación y coordinación entre personas y equipos. Con demasiada frecuencia, cuando las personas
y los equipos residen en un piso diferente, en un edificio diferente o en una zona horaria diferente,
crear y mantener un entendimiento compartido y una confianza mutua se vuelve más difícil,
impidiendo una colaboración efectiva. La colaboración también se ve obstaculizada cuando la primaria
Los mecanismos de comunicación son tickets de trabajo y solicitudes de cambio, o peor, cuando los equipos
están separados por límites contractuales, como cuando el trabajo lo realiza un subcontratado
equipo.
Como vimos en el ejemplo de Etsy Sprouter al comienzo de este capítulo, la forma en que
Organizar equipos puede generar malos resultados, un efecto secundario de la Ley de Conway. Éstos incluyen
dividir equipos por función (por ejemplo, colocando desarrolladores y probadores en diferentes ubicaciones o
subcontratando probadores por completo) o por capa arquitectónica (por ejemplo, aplicación, base de datos).
Estas configuraciones requieren una comunicación y coordinación significativas entre los equipos,
pero todavía resulta en una gran cantidad de retrabajo, desacuerdos sobre las especificaciones, pobre
traspasos, y personas sentadas ociosas esperando a alguien más.
Idealmente, nuestra arquitectura de software debería permitir que los equipos pequeños sean independientes
productivo, suficientemente desacoplado entre sí para poder trabajar sin
Comunicación y coordinación excesiva o innecesaria.
Cuando tenemos una arquitectura estrechamente acoplada, pequeños cambios pueden resultar en una gran escala
fallas Como resultado, cualquier persona que trabaje en una parte del sistema debe coordinar constantemente
con cualquier otra persona que trabaje en otra parte del sistema que puedan afectar, incluyendo
navegando por procesos complejos y burocráticos de gestión del cambio.
Además, para probar que todo el sistema funciona en conjunto, se requieren cambios integrales
con los cambios de cientos, o incluso miles, de otros desarrolladores, que pueden, en
a su vez, dependen de decenas, cientos o miles de sistemas interconectados.
Las pruebas se realizan en entornos de pruebas de integración escasos, que a menudo requieren semanas para
obtener y configurar El resultado no es solo largos plazos de entrega para los cambios (generalmente medidos
en semanas o meses), pero también baja productividad del desarrollador y malos resultados de implementación.
Por el contrario, cuando tenemos una arquitectura que permite a pequeños equipos de desarrolladores
Implementamos, probamos e implementamos código de forma independiente en la producción de forma segura y rápida, podemos
aumentar y mantener la productividad del desarrollador y mejorar los resultados de la implementación. Estas
las características se pueden encontrar en arquitecturas orientadas a servicios (SOA) descritas por primera vez en
Década de 1990, en la que los servicios se pueden probar y desplegar de forma independiente. Una característica clave de las SOA
es que están compuestos de servicios poco acoplados con contextos limitados .‡‡
Tener una arquitectura débilmente acoplada significa que los servicios pueden actualizarse en producción
independientemente, sin tener que actualizar otros servicios. Los servicios deben estar desconectados de
otros servicios y, igual de importante, de bases de datos compartidas (aunque pueden compartir un
servicio de base de datos , siempre que no tengan ningún esquema común).
Los contextos limitados se describen en el libro Domain Driven Design de Eric J. Evans. los
La idea es que los desarrolladores puedan entender y actualizar el código de un servicio
sin saber nada sobre los aspectos internos de sus servicios pares. Los servicios interactúan con
sus pares estrictamente a través de API y, por lo tanto, no comparten estructuras de datos, esquemas de bases de datos,
u otras representaciones internas de objetos. Los contextos limitados aseguran que los servicios sean
compartimentados y tienen interfaces bien definidas, lo que también permite pruebas más fáciles.
MANTENGA LOS TAMAÑOS DE EQUIPO PEQUEÑOS (LA REGLA DEL “EQUIPO DE DOS PIZZAS”)
La Ley de Conway nos ayuda a diseñar los límites de nuestro equipo en el contexto deseado
patrones de comunicación, pero también nos alienta a mantener pequeños los tamaños de nuestro equipo, reduciendo
la cantidad de comunicación entre equipos y nos anima a mantener el alcance de cada
El dominio del equipo es pequeño y acotado.
Como parte de su iniciativa de transformación lejos de una base de código monolítico en 2002, Amazon
usó la regla de las dos pizzas para mantener pequeños los tamaños de los equipos: un equipo tan grande como se pueda alimentar con
dos pizzas, generalmente de cinco a diez personas.
1. Asegura que el equipo tenga una comprensión clara y compartida del sistema en el que están trabajando
en. A medida que los equipos crecen, la cantidad de comunicación requerida para que todos sepan
lo que sucede en escalas de forma combinatoria.
2. Limita la tasa de crecimiento del producto o servicio en el que se trabaja. Al limitar el tamaño
del equipo, limitamos la velocidad a la que su sistema puede evolucionar. Esto también ayuda a garantizar
El equipo mantiene una comprensión compartida del sistema.
3. Descentraliza el poder y permite la autonomía. Cada equipo de dos pizzas (2PT) es como
lo más autónomo posible El líder del equipo, trabajando con el equipo ejecutivo, decide sobre
la métrica comercial clave de la que es responsable el equipo, conocida como la función de acondicionamiento físico,
que se convierte en el criterio general de evaluación para los experimentos del equipo. El equipo es
entonces capaz de actuar de forma autónoma para maximizar esa métrica. §§
4. Liderar un 2PT es una forma para que los empleados obtengan cierta experiencia de liderazgo en un
entorno donde el fracaso no tiene consecuencias catastróficas. Un esencial
El elemento de la estrategia de Amazon fue el vínculo entre la estructura organizativa de un 2PT
y el enfoque arquitectónico de una arquitectura orientada a servicios.
"Los equipos pequeños son rápidos ... y no se atascan en la llamada administración ... cada uno
grupo asignado a un negocio en particular es completamente responsable de ello ... El equipo
Page 126
Caso de estudio
Habilitación de API en Target (2015)
Target es el sexto minorista más grande de los EE. UU. Y gasta más de $ 1 mil millones en tecnología
anualmente. Heather Mickman, directora de desarrollo de Target, describió el
principios de su viaje DevOps: "En los viejos tiempos, solía tomar diez diferentes
equipos para aprovisionar un servidor en Target, y cuando las cosas se rompieron, tendíamos a detenernos
haciendo cambios para evitar más problemas, lo que, por supuesto, empeora todo ".
El problema era que gran parte de nuestros datos principales, como la información sobre el inventario,
los precios y las tiendas estaban encerrados en sistemas heredados y mainframes. Nosotros a menudo
tenía múltiples fuentes de verdades de datos, especialmente entre el comercio electrónico y nuestro
tiendas físicas, que eran propiedad de diferentes equipos, con diferentes datos
estructuras y diferentes prioridades .... El resultado fue que si un nuevo desarrollo
equipo quería construir algo para nuestros invitados, tomaría de tres a seis
meses para construir las integraciones para obtener los datos que necesitaban. Peor aún, sería
tomar otros tres a seis meses para hacer la prueba manual para asegurarse de que
no rompió nada crítico, debido a la cantidad personalizada de punto a punto
integraciones que tuvimos en un sistema muy bien acoplado. Tener que gestionar el
interacciones con los veinte a treinta equipos diferentes, junto con todos sus
dependencias, se requieren muchos gerentes de proyecto, debido a todas las
coordinación y traspasos. Significaba que el desarrollo estaba gastando todo su
tiempo esperando en colas, en lugar de entregar resultados y hacer cosas.
Este largo tiempo de espera para recuperar y crear datos en sus sistemas de registro fue
poner en peligro objetivos comerciales importantes, como la integración de la cadena de suministro
operaciones de las tiendas físicas de Target y su sitio de comercio electrónico, que ahora requerían
En un intento por resolver el problema de los datos, en 2012 Mickman lideró la habilitación de API
equipo para permitir que los equipos de desarrollo "entreguen nuevas capacidades en días en lugar de
meses." Querían que cualquier equipo de ingeniería dentro de Target pudiera obtener y
almacenar los datos que necesitaban, como información sobre sus productos o sus tiendas,
incluidas las horas de operación, la ubicación, si hubo Starbucks en el sitio, y así
adelante.
Las limitaciones de tiempo jugaron un papel importante en la selección del equipo. Mickman explicó que:
Page 127
Debido a que nuestro equipo también necesitaba entregar capacidades en días, no meses, yo
necesitábamos un equipo que pudiera hacer el trabajo, no dárselo a los contratistas; queríamos
personas con habilidades ingeniosas de ingeniería, no personas que supieran manejar
contratos Y para asegurarnos de que nuestro trabajo no estaba en la cola, necesitábamos
poseer toda la pila, lo que significa que asumimos los requisitos de Ops como
bueno ... Trajimos muchas herramientas nuevas para apoyar la integración continua y
entrega continua Y porque sabíamos que si teníamos éxito, lo haríamos
tenemos que escalar con un crecimiento extremadamente alto, trajimos nuevas herramientas como el
Base de datos Cassandra y agente de mensajes Kafka. Cuando pedimos
permiso, nos dijeron que no, pero lo hicimos de todos modos, porque sabíamos que
lo necesitaba.
En los siguientes dos años, el equipo de API Enablement permitió cincuenta y tres nuevos
capacidades comerciales, incluido el envío a la tienda y el registro de regalos, así como su
integraciones con Instacart y Pinterest. Como describió Mickman, "Trabajar con
Pinterest de repente se volvió muy fácil, porque les proporcionamos nuestras API ".
En 2014, el equipo de API Enablement atendió más de 1.500 millones de llamadas API por mes. Por
2015, esto había crecido a diecisiete mil millones de llamadas por mes que abarca noventa diferentes
APIs. Para soportar esta capacidad, rutinariamente realizaron ochenta implementaciones por
semana.
Estos cambios han creado importantes beneficios comerciales para Target: ventas digitales
aumentó 42% durante la temporada de vacaciones de 2014 y aumentó otro 32% en el segundo trimestre.
Durante el fin de semana del Black Friday de 2015, se registraron más de 280 mil pedidos de recogida en la tienda
creado. Para 2015, su objetivo es permitir que 450 de sus 1,800 tiendas puedan cumplir
pedidos de comercio electrónico, por encima de cien.
"El equipo de API Enablement muestra lo que puede hacer un equipo de agentes de cambio apasionados
hacer ", dice Mickman. "Y nos ayuda a prepararnos para la siguiente etapa, que es expandir
DevOps en toda la organización tecnológica ".
A través de los estudios de caso de Etsy y Target, podemos ver cómo la arquitectura y la organización
El diseño puede mejorar drásticamente nuestros resultados. Hecho incorrectamente, la Ley de Conway
Asegurar que la organización cree malos resultados, previniendo la seguridad y la agilidad. Hecho
bueno, la organización permite a los desarrolladores desarrollar, probar y
desplegar valor para el cliente.
† Entre muchas cosas, un ORM abstrae una base de datos, lo que permite a los desarrolladores hacer consultas y manipulación de datos como si fueran simplemente otro objeto en el
lenguaje de programación. Los ORM populares incluyen Hibernate para Java, SQLAlchemy para Python y ActiveRecord para Ruby on Rails.
‡ Sprouter fue una de las muchas tecnologías utilizadas en el desarrollo y la producción que Etsy eliminó como parte de su transformación.
§ Sin embargo, como se explicará más adelante, organizaciones igualmente importantes como Etsy y GitHub tienen orientación funcional.
¶ Adrian Cockcroft comentó: “Para las compañías que ahora están saliendo de contratos de outsourcing de TI de cinco años, es como si se hubieran congelado a tiempo, durante un
de los tiempos más disruptivos en tecnología ". En otras palabras, la externalización de TI es una táctica utilizada para controlar los costos a través de la estasis ejecutada contractualmente, con
precios fijos firmes que programan reducciones anuales de costos. Sin embargo, a menudo resulta en que las organizaciones no pueden responder a los cambios de negocios y
Necesidades tecnológicas.
** Para el resto de estos libros, utilizaremos equipos de servicio de manera intercambiable con equipos de características , equipos de productos , equipos de desarrollo y equipos de entrega .
La intención es especificar el equipo principalmente desarrollando, probando y asegurando el código para que el valor se entregue al cliente.
†† Como John Lauderbach, actualmente vicepresidente de tecnología de la información en los supermercados Roche Bros., bromeó: “Cada nueva aplicación es como un cachorro gratis. No es
el costo de capital inicial que lo mata ... Es el mantenimiento y soporte continuos ".
‡‡ Estas propiedades también se encuentran en los "microservicios", que se basan en los principios de SOA. Un conjunto popular de patrones para la arquitectura web moderna
basado en estos principios es la "aplicación de 12 factores".
§§ En la cultura de Netflix, uno de los siete valores clave es "altamente alineado, vagamente acoplado".
Page 129
128
8 Resultados por
Integrando
Cómo ser genial
Operaciones en el
Trabajo diario de
Desarrollo
Nuestro objetivo es permitir resultados orientados al mercado donde muchos equipos pequeños puedan
entregar valor de forma rápida e independiente al cliente. Esto puede ser un
desafío a alcanzar cuando las operaciones están centralizadas y funcionalmente
orientado, teniendo que atender las necesidades de muchos equipos de desarrollo diferentes
con necesidades potencialmente muy diferentes. El resultado a menudo puede ser largo plomo
tiempos para el trabajo necesario de Ops, repriorización y escalado constante, y
Cada una de estas unidades de negocios tenía equipos de desarrollo dedicados que a menudo
eligió tecnologías muy diferentes. Cuando estos grupos querían desplegarse
nueva funcionalidad, tendrían que competir por un grupo común de escasos
Recursos de operaciones. Además, todos estaban luchando con una prueba poco confiable
y entornos de integración, así como una versión extremadamente engorrosa
procesos.
130
Farrall pensó que la mejor manera de resolver este problema era incrustando Ops
experiencia en equipos de desarrollo. Él observó: "Cuando los equipos de desarrollo tenían
problemas con las pruebas o la implementación, necesitaban más que solo tecnología
o ambientes. Lo que también necesitaban era ayuda y entrenamiento. Al principio, nosotros
ingenieros y arquitectos de Ops integrados en cada uno de los equipos de desarrollo, pero hay
simplemente no había suficientes ingenieros de operaciones para cubrir tantos equipos. Éramos
capaz de ayudar a más equipos con lo que llamamos un modelo de enlace de Ops y con
menos gente."
Al hacer esto, Farrall pudo ayudar a los equipos de desarrollo en toda la organización
ser más productivo y lograr sus objetivos de equipo. Además, él
ayudó a los equipos a priorizar alrededor de sus restricciones globales de operaciones, reduciendo el
Número de sorpresas descubiertas a mitad del proyecto y, en última instancia, aumentando el
rendimiento general del proyecto.
131
Cree capacidades de autoservicio para permitir a los desarrolladores en los equipos de servicio
ser productivo
Asigne enlaces de Ops a los equipos de servicio cuando incrustar Ops no sea
posible.
Por último, describimos cómo los ingenieros de Ops pueden integrarse en el equipo de desarrollo
Una forma de permitir resultados orientados al mercado es que las Operaciones creen un conjunto
de plataformas centralizadas y servicios de herramientas que cualquier equipo de desarrollo puede usar para
ser más productivo, como obtener entornos de producción,
tuberías de implementación, herramientas de prueba automatizadas, telemetría de producción
paneles de instrumentos, y así sucesivamente.† Al hacer esto, permitimos que los equipos de desarrollo gasten más
funcionalidad de creación de tiempo para su cliente, en lugar de obtener todos los
infraestructura requerida para entregar y soportar esa característica en la producción.
Todas las plataformas y servicios que brindamos deberían (idealmente) ser automatizados y
disponible bajo demanda, sin requerir que un desarrollador abra un ticket y
esperar a que alguien realice el trabajo manualmente. Esto asegura que las operaciones
no se convierte en un cuello de botella para sus clientes (por ejemplo, "Recibimos su
solicitud de trabajo, y tomará seis semanas configurar manualmente esas pruebas
ambientes "). ‡
Al hacer esto, permitimos que los equipos de productos obtengan lo que necesitan, cuando
lo necesita, así como también reduce la necesidad de comunicaciones y coordinación. Como
Damon Edwards observó: "Sin estas plataformas de operaciones de autoservicio,
la nube es simplemente Hosting 2.0 caro ”.
En casi todos los casos, no exigiremos que los equipos internos usen estos
plataformas y servicios: estos equipos de plataforma tendrán que ganarse y
satisfacer a sus clientes internos, a veces incluso compitiendo con externos
vendedores. Al crear este mercado interno efectivo de capacidades, nosotros
ayudar a garantizar que las plataformas y servicios que creamos sean los más fáciles y
La opción más atractiva disponible (el camino de menor resistencia).
Page 132
Por ejemplo, podemos crear una plataforma que proporcione una versión compartida
repositorio de control con bibliotecas de seguridad previamente bendecidas, una tubería de implementación
A menudo, estos equipos de plataforma proporcionan otros servicios para ayudar a sus clientes.
aprender su tecnología, migrar de otras tecnologías e incluso proporcionar
Coaching y consultoría para ayudar a elevar el estado de la práctica dentro del
organización. Estos servicios compartidos también facilitan la estandarización, que
permitir a los ingenieros ser productivos rápidamente, incluso si cambian entre
equipos Por ejemplo, si cada equipo de producto elige una cadena de herramientas diferente,
los ingenieros pueden tener que aprender un conjunto completamente nuevo de tecnologías para hacer su
trabajo, colocando los objetivos del equipo por delante de los objetivos globales.
En organizaciones donde los equipos solo pueden usar herramientas aprobadas, podemos comenzar por
eliminar este requisito para algunos equipos, como el equipo de transformación,
para que podamos experimentar y descubrir qué capacidades hacen esos equipos
más productivo.
Otra forma en que podemos permitir resultados más orientados al mercado es habilitar
los equipos de productos se volverán más autosuficientes incorporando Operaciones
ingenieros dentro de ellos, reduciendo así su dependencia de centralizado
Operaciones Estos equipos de productos también pueden ser completamente responsables de
prestación de servicios y soporte de servicios.
Jason Cox dijo: "En muchas partes de Disney hemos incorporado Ops (sistema
ingenieros) dentro de los equipos de productos en nuestras unidades de negocio, junto con
Desarrollo, prueba e incluso seguridad de la información. Ha cambiado totalmente el
dinámica de cómo trabajamos. Como ingenieros de operaciones, creamos las herramientas y
capacidades que transforman la forma en que trabajan las personas, e incluso la forma en que
pensar. En las operaciones tradicionales, simplemente conducíamos el tren que alguien más construyó.
Pero en la Ingeniería de Operaciones moderna, no solo ayudamos a construir el tren, sino que también
también los puentes sobre los que ruedan los trenes ".
Para nuevos proyectos de desarrollo grandes, inicialmente podemos incorporar ingenieros de Ops
en esos equipos. Su trabajo puede incluir ayudar a decidir qué construir y
cómo construirlo, influyendo en la arquitectura del producto, ayudando a influir
opciones tecnológicas internas y externas, que ayudan a crear nuevas capacidades en
Page 134
Participarán en todos los rituales del equipo de desarrollo, como la planificación de reuniones,
Standups diarios y demostraciones donde el equipo muestra nuevas características
y decide cuáles enviar. Como la necesidad de conocimiento de Ops y
las capacidades disminuyen, los ingenieros de Ops pueden hacer la transición a diferentes proyectos o
compromisos, siguiendo el patrón general que la composición dentro de
los equipos de productos cambian a lo largo de su ciclo de vida.
Por una variedad de razones, como el costo y la escasez, es posible que no podamos
incrustar a los ingenieros de Ops en cada equipo de producto. Sin embargo, podemos obtener muchos de
los mismos beneficios al asignar un enlace designado para cada equipo de producto.
Page 135
Asignar enlaces Ops nos permite apoyar más equipos de productos que el
modelo Ops integrado. Nuestro objetivo es garantizar que Ops no sea una restricción para
Los equipos de producto. Si descubrimos que los enlaces Ops se estiran demasiado,
evitando que los equipos de producto logren sus objetivos, entonces probablemente
necesita reducir la cantidad de equipos que cada enlace admite o
incrustar temporalmente un ingeniero de operaciones en equipos específicos.
Cuando los ingenieros de Ops están integrados o asignados como enlaces en nuestro producto
equipos, podemos integrarlos en los rituales de nuestro equipo de desarrollo. En esta sección, nuestro
El objetivo es ayudar a los ingenieros de Ops y otros no desarrolladores a comprender mejor
la cultura de desarrollo existente e integrarlos de manera proactiva en todos
aspectos de planificación y trabajo diario. Como resultado, Operaciones está mejor capacitada para
planificar e irradiar cualquier conocimiento necesario a los equipos de productos, influyendo
trabajar mucho antes de que entre en producción. Las siguientes secciones describen
Algunos de los rituales estándar utilizados por los equipos de desarrollo que utilizan ágil
métodos y cómo integraríamos a los ingenieros de Ops en ellos. De ninguna manera
Las prácticas ágiles son un requisito previo para este paso: como ingenieros de Ops, nuestro objetivo es
Como observó Ernest Mueller: "Creo que DevOps funciona mucho mejor si
Los equipos de operaciones adoptan los mismos rituales ágiles que los equipos de desarrollo han utilizado:
hemos tenido éxitos fantásticos resolviendo muchos problemas asociados con Ops
puntos débiles, además de integrarse mejor con los equipos de desarrollo ".
Page 136
Tener ingenieros de Ops que asistan a las retrospectivas de nuestro equipo de proyecto significa que pueden
También se benefician de cualquier nuevo aprendizaje. Además, cuando hay un
despliegue o lanzamiento en ese intervalo, las operaciones deben presentar el
resultados y cualquier aprendizaje resultante, creando retroalimentación en el producto
equipo. Al hacer esto, podemos mejorar cómo se planifica el trabajo futuro y
realizado, mejorando nuestros resultados. Ejemplos de retroalimentación que Operaciones
puede traer a una retrospectiva incluyen:
137
"El despliegue de la semana pasada fue uno de los más difíciles y largos que hemos tenido
tenido en más de un año. Aquí hay algunas ideas sobre cómo se puede mejorar ".
"La campaña de promoción que hicimos la semana pasada fue mucho más difícil que nosotros
pensé que sería, y probablemente no deberíamos hacer una oferta como esa
de nuevo. Aquí hay algunas ideas sobre otras ofertas que podemos hacer para lograr nuestro
metas."
"Durante la última implementación, el mayor problema que tuvimos fue nuestro firewall
las reglas ahora tienen miles de líneas, lo que lo hace extremadamente difícil y
arriesgado de cambiar. Necesitamos rediseñar cómo evitamos las personas no autorizadas.
tráfico de red."
El trabajo adicional identificado durante las retrospectivas del equipo del proyecto cae en
la amplia categoría de trabajo de mejora, como la reparación de defectos, refactorización,
y automatizar el trabajo manual. Los gerentes de producto y gerentes de proyecto pueden
querer diferir o priorizar el trabajo de mejora a favor del cliente
caracteristicas.
Sin embargo, debemos recordar a todos que la mejora del trabajo diario es más
importante que el trabajo diario en sí, y que todos los equipos deben haber dedicado
capacidad para esto (por ejemplo, reservar el 20% de todos los ciclos para el trabajo de mejora,
programación de un día por semana o una semana por mes, etc.). Sin hacer
esto, la productividad del equipo seguramente se detendrá bajo
El peso de su propia deuda técnica y de proceso.
Page 138
Debido a que las operaciones son parte del flujo de valor del producto, debemos poner el
Trabajo de operaciones que es relevante para la entrega del producto en el kanban compartido
tablero. Esto nos permite ver más claramente todo el trabajo requerido para mover nuestro
codificar en producción, así como realizar un seguimiento de todo el trabajo de Operaciones requerido para
Apoyar el producto. Además, nos permite ver dónde está el trabajo de Ops
bloqueado y donde el trabajo necesita escalar, destacando las áreas donde podemos
necesita mejorar.
Los tableros Kanban son una herramienta ideal para crear visibilidad, y la visibilidad es la clave.
componente para reconocer e integrar adecuadamente el trabajo de Ops en todos los
flujos de valor relevantes. Cuando lo hacemos bien, logramos orientarnos al mercado
resultados, independientemente de cómo hayamos dibujado nuestros organigramas.
Page 139
PARTE II CONCLUSIÓN
En la Parte III: La primera forma, las prácticas técnicas de flujo , ahora comenzaremos
para explorar cómo implementar las prácticas técnicas específicas para realizar
principios de flujo, que permiten el flujo rápido de trabajo desde el desarrollo hasta
Operaciones sin causar caos e interrupción aguas abajo.
† Los términos plataforma , servicio compartido y cadena de herramientas se utilizarán indistintamente en este libro.
‡ Ernest Mueller observó: “En Bazaarvoice, el acuerdo fue que estos equipos de plataforma que fabrican herramientas aceptan requisitos, pero
no trabajo de otros equipos ".
§ Después de todo, diseñar un sistema por adelantado para su reutilización es un modo de falla común y costoso de muchas arquitecturas empresariales.
¶ Sin embargo, si descubrimos que toda la organización de Desarrollo simplemente se sienta en sus escritorios todo el día sin hablar con cada uno
otro, puede que tengamos que encontrar una forma diferente de involucrarlos, como comprarles el almuerzo, comenzar un club de lectura, turnarse para hacer
Presentaciones de "almuerzo y aprendizaje", o conversaciones para descubrir cuáles son los mayores problemas de todos, para que podamos entender
descubrimos cómo podemos mejorar sus vidas.
** Scrum es una metodología de desarrollo ágil, descrita como "una estrategia de desarrollo de producto flexible y holística donde un desarrollo
el equipo trabaja como una unidad para alcanzar un objetivo común ". Fue descrito por primera vez por completo por Ken Schwaber y Mike Beedle en el libro Agile
Desarrollo de software con Scrum . En este libro, utilizamos el término "desarrollo ágil" o "desarrollo iterativo" para abarcar
Las diversas técnicas utilizadas por metodologías especiales como Agile y Scrum.
141
140
9 Fundamentos de nuestro
Despliegue
Crea el
Tubería
Para crear un flujo rápido y confiable de Dev a Ops, debemos asegurarnos de que
siempre utilizamos entornos de producción en cada etapa del valor
corriente. Además, estos entornos deben crearse de forma automatizada.
de manera ideal, a pedido de scripts e información de configuración almacenada
en control de versiones, y totalmente autoservicio, sin ningún trabajo manual
requerido de Operaciones. Nuestro objetivo es asegurarnos de que podamos recrear el
entorno de producción completo basado en lo que hay en el control de versiones.
Con demasiada frecuencia, la única vez que descubrimos cómo funcionan nuestras aplicaciones en
cualquier cosa que se parezca a un entorno de producción es durante la producción
implementación: demasiado tarde para corregir problemas sin que el cliente sea
impactado negativamente. Un ejemplo ilustrativo del espectro de problemas que
puede ser causado por aplicaciones y entornos construidos inconsistentemente
Programa Enterprise Data Warehouse dirigido por Em Campbell-Pretty en general
Empresa australiana de telecomunicaciones en 2009. Campbell-Pretty se convirtió en
el gerente general y patrocinador comercial de este programa de $ 200 millones,
heredar la responsabilidad de todos los objetivos estratégicos que se basaron en esto
plataforma.
Sin embargo, después de usar Agile durante casi un año, experimentaron solo pequeñas
mejoras, aún por debajo de sus resultados comerciales necesarios.
Campbell-Pretty realizó una retrospectiva de todo el programa y preguntó: "Después
Page 144
Reflexionando sobre todas nuestras experiencias durante el último lanzamiento, ¿cuáles son las cosas que podríamos
¿eso duplicaría nuestra productividad?
El equipo realizó una ingeniería inversa de todos los cambios que se habían realizado para
los diferentes entornos y ponerlos a todos en control de versiones. Ellos también
automatizó su proceso de creación de entorno para que pudieran repetidamente y
girar correctamente los ambientes.
Campbell-Pretty describió los resultados y señaló que "el tiempo que tomó obtener un
El entorno correcto pasó de ocho semanas a un día. Este fue uno de los
Page 145
Como se ve en el ejemplo del almacén de datos de la empresa anterior, uno de los principales
causas contribuyentes de caótica, disruptiva y, a veces, incluso catastrófica
lanzamientos de software, es la primera vez que vemos cómo funciona nuestra aplicación
se comporta en un entorno de producción con carga y producción realistas
conjuntos de datos es durante el lanzamiento.† En muchos casos, los equipos de desarrollo pueden tener
entornos de prueba solicitados en las primeras etapas del proyecto.
Sin embargo, cuando se requieren largos plazos de entrega para que las Operaciones entreguen
entornos de prueba, los equipos pueden no recibirlos lo suficientemente pronto como para realizar
prueba adecuada Peor aún, los entornos de prueba a menudo están mal configurados o lo son
diferente de nuestros entornos de producción que todavía terminamos con grandes
problemas de producción a pesar de haber realizado pruebas previas a la implementación.
En este paso, queremos que los desarrolladores ejecuten entornos similares a la producción en sus
Estaciones de trabajo propias, creadas bajo demanda y autoservicio. Al hacer esto,
los desarrolladores pueden ejecutar y probar su código en entornos de producción como
parte de su trabajo diario, proporcionando retroalimentación temprana y constante sobre la calidad
su trabajo.
Page 146
Uso de herramientas de configuración del sistema operativo automatizado (p. Ej., Solaris
Jumpstart, Red Hat Kickstart, Debian preestablecido)
Hacer girar un nuevo entorno en una nube pública (por ejemplo, Amazon Web
Servicios, Google App Engine, Microsoft Azure), nube privada u otro
PaaS (plataforma como servicio, como OpenStack o Cloud Foundry, etc.).
Debido a que hemos definido cuidadosamente todos los aspectos del entorno antes de tiempo,
no solo podemos crear nuevos entornos rápidamente, sino también asegurarnos de que
Estos entornos serán estables, confiables, consistentes y seguros. Esta
Las operaciones se benefician de esta capacidad, para crear nuevos entornos rápidamente,
porque la automatización del proceso de creación del entorno impone consistencia
y reduce el trabajo manual tedioso y propenso a errores. Además, desarrollo
se beneficia al poder reproducir todas las partes necesarias de la producción
entorno para construir, ejecutar y probar su código en sus estaciones de trabajo. Haciendo
esto, permitimos que los desarrolladores encuentren y solucionen muchos problemas, incluso lo antes posible
etapas del proyecto, a diferencia de durante las pruebas de integración o peor, en
producción.
Durante décadas, el uso integral del control de versiones se ha convertido cada vez más en un
práctica obligatoria de desarrolladores individuales y equipos de desarrollo.¶ A
Page 147
El sistema de control de versiones registra los cambios en los archivos o conjuntos de archivos almacenados en el
sistema. Esto puede ser código fuente, activos u otros documentos que pueden ser parte
de un proyecto de desarrollo de software. Hacemos cambios en grupos llamados
confirmaciones o revisiones. Cada revisión, junto con metadatos como quién hizo
el cambio y cuándo se almacena dentro del sistema de una forma u otra,
permitiéndonos comprometer, comparar, fusionar y restaurar revisiones pasadas a objetos
al repositorio. También minimiza los riesgos al establecer una forma de revertir
objetos en producción a versiones anteriores. (En este libro, los siguientes términos
se utilizará indistintamente: registrado en el control de versiones, comprometido en
Cuando los desarrolladores colocan todos sus archivos de origen de aplicaciones y configuraciones en
control de versiones, se convierte en el único repositorio de verdad que contiene el
estado previsto preciso del sistema. Sin embargo, porque entregar valor a la
el cliente requiere tanto nuestro código como los entornos en los que se ejecuta, necesitamos
nuestros entornos en control de versiones también. En otras palabras, el control de versiones es
para todos en nuestro flujo de valor, incluidos QA, Operaciones, Infosec, así como
desarrolladores Al poner todos los artefactos de producción en control de versiones, nuestro
El repositorio de control de versiones nos permite reproducir de forma repetida y confiable
componentes de nuestro sistema de software en funcionamiento; esto incluye nuestras aplicaciones
y entorno de producción, así como toda nuestra preproducción
ambientes.
Para garantizar que podamos restaurar el servicio de producción de forma repetida y previsible
(e, idealmente, rápidamente) incluso cuando ocurren eventos catastróficos, debemos registrarnos
los siguientes activos para nuestro repositorio de control de versiones compartido:
Todo el código de aplicación y las dependencias (p. Ej., Bibliotecas, contenido estático, etc.)
Cualquier script utilizado para crear esquemas de bases de datos, datos de referencia de aplicaciones, etc.
Cualquier archivo utilizado para crear contenedores (por ejemplo, definición de Docker o Rocket o
archivos de composición)
Cualquier script que admita el empaquetado de código, la implementación, la migración de la base de datos,
y aprovisionamiento ambiental
Todos los artefactos del proyecto (por ejemplo, documentación de requisitos, implementación
procedimientos, notas de lanzamiento, etc.)
148 de 1189.
Todos los archivos de configuración en la nube (por ejemplo, plantillas de AWS Cloudformation,
Archivos Microsoft Azure Stack DSC, OpenStack HEAT)
Es posible que tengamos múltiples repositorios para diferentes tipos de objetos y servicios,
donde están etiquetados y etiquetados junto con nuestro código fuente. Por ejemplo,
podemos almacenar grandes imágenes de máquinas virtuales, archivos ISO, binarios compilados y
etc. en repositorios de artefactos (por ejemplo, Nexus, Artifactory). Alternativamente, nosotros
puede ponerlos en tiendas de blob (por ejemplo, cubos de Amazon S3) o poner imágenes de Docker
en los registros de Docker, y así sucesivamente.
En el Informe de estado de DevOps 2014 de Puppet Labs , el uso del control de versiones por
Ops fue el mayor predictor tanto del rendimiento de TI como de la organización
actuación. De hecho, si Ops usó el control de versiones fue un predictor más alto
tanto para el desempeño de TI como para el desempeño organizacional que si Dev
control de versiones usado.
Los hallazgos del Informe de estado de DevOps de Puppet Labs 2014 subrayan el
El control crítico de la versión juega un papel en el proceso de desarrollo de software. Nosotros
ahora sepa cuándo se registran todos los cambios en la aplicación y el entorno
control de versiones, nos permite no solo ver rápidamente todos los cambios que podrían
ha contribuido a un problema, pero también proporciona los medios para volver a un
estado conocido anterior, en ejecución, lo que nos permite recuperarnos más rápidamente de
fallas
Pero, ¿por qué el uso del control de versiones para nuestros entornos predice TI y
¿Es mejor el desempeño organizacional que usar el control de versiones para nuestro código?
Porque en casi todos los casos, hay órdenes de magnitud más configurables
configuraciones en nuestro entorno que en nuestro código. En consecuencia, es el
entorno que necesita estar más en control de versiones.‡‡
Page 149
En lugar de iniciar sesión manualmente en los servidores y hacer cambios, debemos hacer
cambios de una manera que garantiza que todos los cambios se replican en todas partes
automáticamente y que todos nuestros cambios se pongan en control de versiones.
Page 151
En otras palabras, solo aceptaremos el trabajo de desarrollo como hecho cuando puede ser
construido, implementado y confirmado con éxito que se ejecuta como se esperaba en un
entorno de producción, en lugar de simplemente cuando un desarrollador lo cree
para hacer, idealmente, se ejecuta bajo una carga de producción con una producción
como conjunto de datos, mucho antes del final de un sprint. Esto evita situaciones donde un
La función se llama hecho simplemente porque un desarrollador puede ejecutarla con éxito en
su computadora portátil pero en ningún otro lugar.
Al hacer que los desarrolladores escriban, prueben y ejecuten su propio código en una producción
entorno, la mayoría del trabajo para integrar con éxito nuestro código y
entornos ocurren durante nuestro trabajo diario, en lugar de al final de la
lanzamiento. Al final de nuestro primer intervalo, nuestra aplicación se puede demostrar
para ejecutarse correctamente en un entorno de producción, con el código y
El entorno se ha integrado muchas veces, idealmente con todos
los pasos automatizados (no se requieren modificaciones manuales).
El rápido flujo de trabajo desde el desarrollo hasta las operaciones requiere que cualquiera
puede obtener entornos de producción bajo demanda. Al permitir que los desarrolladores
usar entornos similares a la producción incluso en las primeras etapas de un software
proyecto, reducimos significativamente el riesgo de problemas de producción más adelante. Esto es
Una de las muchas prácticas que demuestran cómo las operaciones pueden hacer que los desarrolladores
Mucho más productivo. Aplicamos la práctica de los desarrolladores que ejecutan su código
Página 152
Tener estas prácticas en su lugar establece el escenario para permitir una prueba integral
automatización, que se explora en el próximo capítulo.
† En este contexto, el entorno se define como todo en la pila de aplicaciones, excepto la aplicación, incluidas las bases de datos,
sistemas operativos, redes, virtualización y todas las configuraciones asociadas.
‡ La mayoría de los desarrolladores quieren probar su código, y a menudo han hecho todo lo posible para obtener entornos de prueba para hacerlo.
Se sabe que los desarrolladores reutilizan entornos de prueba antiguos de proyectos anteriores (a menudo años) o preguntan a alguien que tiene un
reputación de poder encontrar uno, simplemente no preguntarán de dónde vino, porque, invariablemente, alguien en algún lugar está ahora
Falta un servidor.
§ Idealmente, deberíamos encontrar errores antes de las pruebas de integración cuando es demasiado tarde en el ciclo de pruebas para crear comentarios rápidos para
desarrolladores Si no podemos hacerlo, es probable que tengamos un problema arquitectónico que debe abordarse. Diseñando nuestros sistemas para
comprobabilidad, para incluir la capacidad de descubrir la mayoría de los defectos utilizando un entorno virtual no integrado en una estación de trabajo de desarrollo,
es una parte clave de la creación de una arquitectura que admita flujo rápido y retroalimentación.
¶ El primer sistema de control de versiones probablemente estaba ACTUALIZADO en el CDC6600 (1969). Más tarde llegó SCCS (1972), CMS en VMS (1978), RCS
(1982), y así sucesivamente.
** Se puede observar que el control de versiones cumple algunas de las construcciones ITIL de la Biblioteca de medios definitiva (DML) y la Configuración
Base de datos de gestión (CMDB), haciendo un inventario de todo lo necesario para volver a crear el entorno de producción.
†† En futuros pasos, también realizaremos el check-in para controlar la versión de toda la infraestructura de soporte que construimos, como las suites de prueba automatizadas
y nuestra infraestructura de tubería de integración y despliegue continuo.
‡‡ Cualquiera que haya realizado una migración de código para un sistema ERP (por ejemplo, SAP, Oracle Financials, etc.) puede reconocer la siguiente situación:
Cuando falla la migración de un código, rara vez se debe a un error de codificación. En cambio, es mucho más probable que la migración haya fallado debido a algunos
diferencia en los entornos, como entre Desarrollo y QA o QA y Producción.
§§ En Netflix, la edad promedio de la instancia de Netflix AWS es de veinticuatro días, con un 60% de menos de una semana de antigüedad.
*** Toda la pila de aplicaciones y el entorno pueden agruparse en contenedores, lo que puede permitir una simplicidad y
velocidad en toda la tubería de implementación.
††† El término integración tiene muchos usos ligeramente diferentes en Desarrollo y Operaciones. En desarrollo, la integración típicamente
se refiere a la integración de código, que es la integración de múltiples ramas de código en el tronco en el control de versiones. En entrega continua
y DevOps, las pruebas de integración se refieren a las pruebas de la aplicación en un entorno de producción o prueba integrada
ambiente.
Page 154
153
10 Habilitar rápido y
Pruebas automatizadas confiables
En este punto, el desarrollo y el control de calidad están utilizando entornos similares a la producción en su diario
trabajo, y estamos integrando y ejecutando con éxito nuestro código en una producción
entorno para cada característica que se acepta, con todos los cambios registrados en la versión
controlar. Sin embargo, es probable que obtengamos resultados no deseados si encontramos y corregimos errores en un
fase de prueba separada, ejecutada por un departamento de control de calidad separado solo después de que todo el desarrollo haya
ha sido completado Y, si las pruebas solo se realizan unas pocas veces al año, los desarrolladores aprenden
sobre sus errores meses después de que introdujeron el cambio que causó el error. Por
entonces, el vínculo entre causa y efecto probablemente se ha desvanecido, resolver el problema requiere
lucha contra incendios y arqueología y, lo peor de todo, nuestra capacidad de aprender del error y
integrarlo en nuestro trabajo futuro se ve significativamente disminuido.
Las pruebas automatizadas abordan otro problema significativo e inquietante. Gary Gruver
observa que "sin pruebas automatizadas, cuanto más código escribimos, más tiempo y
Aunque Google ahora sin duda ejemplifica una cultura que valora las pruebas automatizadas en
escala, este no siempre fue el caso. En 2005, cuando Mike Bland se unió a la organización,
la implementación en Google.com a menudo era extremadamente problemática, especialmente para Google Web
Equipo de servidor (GWS).
Como explica Bland: "El equipo de GWS se había puesto en una posición a mediados de la década de 2000 donde
fue extremadamente difícil hacer cambios en el servidor web, una aplicación C ++ que manejaba
todas las solicitudes a la página de inicio de Google y muchas otras páginas web de Google. Tan importante y
prominente como lo fue Google.com, estar en el equipo de GWS no fue una tarea glamorosa:
a menudo era el vertedero de todos los diferentes equipos que estaban creando varios
funcionalidad de búsqueda, todos los cuales estaban desarrollando código independientemente uno del otro. Ellos
tuvo problemas como que las compilaciones y las pruebas demoraron demasiado, el código se puso en producción
sin ser probado, y los equipos controlan cambios grandes e infrecuentes que entran en conflicto con
los de otros equipos ".
Las consecuencias de esto fueron grandes: los resultados de búsqueda podrían tener errores o convertirse en
inaceptablemente lento, que afecta a miles de consultas de búsqueda en Google.com. El potencial
El resultado no fue solo la pérdida de ingresos, sino también la confianza del cliente.
Bland describe cómo afectó a los desarrolladores que implementaron cambios: "El miedo se convirtió en la mente-
asesino. El miedo evitó que los nuevos miembros del equipo cambiaran las cosas porque no lo hicieron
Entiende el sistema. Pero el miedo también impidió que las personas experimentadas cambiaran las cosas.
porque lo entendieron muy bien ".† Bland era parte del grupo que se determinó
para resolver este problema.
155 de 1189.
El líder del equipo de GWS, Bharat Mediratta, creía que las pruebas automatizadas ayudarían. Como Bland
describe: "Crearon una línea dura: no se aceptarían cambios en GWS sin
pruebas automatizadas de acompañamiento. Establecieron una construcción continua y la mantuvieron religiosamente
paso. Establecieron monitoreo de cobertura de prueba y se aseguraron de que su nivel de cobertura de prueba
subió con el tiempo. Redactaron políticas y guías de prueba e insistieron en que los contribuyentes
tanto dentro como fuera del equipo los siguen ".
Los resultados fueron sorprendentes. Como señala Bland, "GWS se convirtió rápidamente en uno de los más
equipos productivos en la empresa, integrando grandes cantidades de cambios de diferentes
equipos cada semana manteniendo un calendario de lanzamiento rápido. Los nuevos miembros del equipo fueron
capaz de hacer contribuciones productivas a este complejo sistema rápidamente, gracias a una buena prueba
cobertura y código de salud. Finalmente, su política radical permitió el inicio de Google.com
página para expandir rápidamente sus capacidades y prosperar en un movimiento increíblemente rápido y
panorama tecnológico competitivo ".
Ahora, cuando cualquier desarrollador de Google confirma el código, se ejecuta automáticamente en un conjunto de
cientos de miles de pruebas automatizadas. Si el código pasa, se fusiona automáticamente
en el maletero, listo para ser desplegado en producción. Muchas propiedades de Google se crean cada hora o
diariamente, luego elija qué compilaciones lanzar; otros adoptan un continuo "Push on Green"
Filosofía de entrega.
Las apuestas son más altas que nunca: un solo error de implementación de código en Google puede eliminar
cada propiedad, todo al mismo tiempo (como un cambio de infraestructura global o cuando un
el defecto se introduce en una biblioteca central de la que depende cada propiedad).
Eran Messeri, ingeniero del grupo de Infraestructura de desarrolladores de Google, señala: "Grande
las fallas ocurren ocasionalmente. Recibirás un montón de mensajes instantáneos e ingenieros llamando
en tu puerta [Cuando la tubería de implementación se rompe,] necesitamos arreglarlo de inmediato,
porque los desarrolladores ya no pueden confirmar el código. En consecuencia, queremos que sea muy fácil.
retroceder ".
Lo que permite que este sistema funcione en Google es la profesionalidad de la ingeniería y una gran confianza
cultura que asume que todos quieren hacer un buen trabajo, así como la capacidad de detectar y
Corrija los problemas rápidamente. Messeri explica: "No hay políticas estrictas en Google, como" Si
interrumpe la producción de más de diez proyectos, tiene un SLA para solucionar el problema
diez minutos.' En cambio, existe un respeto mutuo entre los equipos y un acuerdo implícito.
que todo el mundo haga lo que sea necesario para mantener en funcionamiento la canalización de implementación. Todos sabemos
que un día romperé tu proyecto por accidente; al día siguiente, puedes romper el mío ".
Lo que Mike Bland y el equipo de Testing Grouplet lograron ha hecho de Google uno de los
organizaciones tecnológicas más productivas del mundo. Para 2013, pruebas automatizadas y
La integración continua en Google permitió a más de cuatro mil pequeños equipos trabajar juntos
y mantenerse productivo, todos desarrollando, integrando, probando e implementando simultáneamente
su código en producción. Todo su código está en un único repositorio compartido, compuesto por
Page 156
miles de millones de archivos, todos ellos continuamente construidos e integrados, con el 50% de su código siendo
cambiado cada mes Algunas otras estadísticas impresionantes sobre su desempeño incluyen:
Nuestro objetivo es incorporar calidad a nuestro producto, incluso en las primeras etapas, al tener
Los desarrolladores crean pruebas automatizadas como parte de su trabajo diario. Esto crea una respuesta rápida
bucle que ayuda a los desarrolladores a encontrar problemas temprano y solucionarlos rápidamente, cuando hay
pocas limitaciones (p. ej., tiempo, recursos).
En este paso, creamos conjuntos de pruebas automatizadas que aumentan la frecuencia de integración y
prueba de nuestro código y nuestros entornos de periódicos a continuos. Hacemos esto por
construyendo nuestra tubería de implementación, que realizará la integración de nuestro código y
entornos y desencadenan una serie de pruebas cada vez que se introduce un nuevo cambio en la versión
controlar. § (Verfigura 13. )
La tubería de despliegue, definida por primera vez por Jez Humble y David Farley en su libro
Entrega continua: lanzamientos confiables de software a través de compilación, prueba e implementación
La automatización garantiza que todo el código registrado en el control de versiones se construya automáticamente y
probado en un entorno similar a la producción. Al hacer esto, encontramos cualquier compilación, prueba o
errores de integración tan pronto como se introduce un cambio, lo que nos permite corregirlos de inmediato.
Hecho correctamente, esto nos permite estar siempre seguros de que estamos en una implementación
Estado de envío.
Para lograr esto, debemos crear procesos automatizados de compilación y prueba que se ejecutan en
ambientes. Esto es crítico por las siguientes razones:
Nuestro proceso de compilación y prueba puede ejecutarse todo el tiempo, independientemente de los hábitos de trabajo de
ingenieros individuales
Un proceso de compilación y prueba segregado garantiza que comprendamos todas las dependencias
requerido para construir, empaquetar, ejecutar y probar nuestro código (es decir, eliminar el "funcionó en el
portátil de desarrollador, pero se rompió en la producción "problema").
Page 157
En lugar de poner nuestro código en paquetes, podemos optar por empaquetar nuestras aplicaciones en
contenedores desplegables (por ejemplo, Docker, Rkt, LXD, AMI).
Nuestra tubería de implementación se valida después de cada cambio que nuestro código integra con éxito
en un entorno de producción. Se convierte en la plataforma a través de la cual los probadores solicitan
y certifica las compilaciones durante las pruebas de aceptación y las pruebas de usabilidad, y se ejecutará automáticamente
validaciones de rendimiento y seguridad.
>
Figura 13: La tubería de implementación (Fuente: Humble y Farley, Entrega continua , 3.)
Además, se usará para compilaciones de autoservicio para UAT (prueba de aceptación del usuario),
pruebas de integración y entornos de prueba de seguridad. En pasos futuros, a medida que evolucionamos
canalización de implementación, también se utilizará para administrar todas las actividades necesarias para llevar nuestro
cambios del control de versiones a la implementación.
Se ha diseñado una variedad de herramientas para proporcionar la funcionalidad de canalización de implementación, muchas
de ellos de código abierto (por ejemplo, Jenkins, ThoughtWorks Go, Concourse, Bamboo, Microsoft
Team Foundation Server, TeamCity, Gitlab CI, así como soluciones basadas en la nube como
Travis CI y Snap). ¶
Una vez que se aceptan los cambios en el control de versiones, queremos empaquetar nuestro código solo una vez, así que
que los mismos paquetes se utilizan para implementar código en toda nuestra línea de implementación.
Al hacer esto, el código se implementará en nuestros entornos integrados de prueba y preparación en
de la misma manera que se implementa en producción. Esto reduce las variaciones que pueden evitar
errores posteriores que son difíciles de diagnosticar (por ejemplo, usar diferentes compiladores, compiladores
banderas, versiones de biblioteca o configuraciones).††
Como resultado, nuestra infraestructura de canalización de implementación se vuelve fundamental para nuestra
procesos de desarrollo como nuestra infraestructura de control de versiones. Nuestra tubería de despliegue también
almacena el historial de cada compilación de código, incluida la información sobre qué pruebas fueron
realizado en qué compilación, qué compilaciones se han implementado en qué entorno, y
cuáles fueron los resultados de la prueba. En combinación con la información en nuestro control de versiones
historial, podemos determinar rápidamente qué causó la ruptura de nuestra tubería de implementación y,
probablemente, cómo solucionar el error.
Esta información también nos ayuda a cumplir con los requisitos de evidencia para auditoría y cumplimiento
propósitos, con evidencia que se genera automáticamente como parte del trabajo diario.
Ahora que tenemos una infraestructura de canalización de implementación en funcionamiento, debemos crear nuestra
Prácticas de integración continua , que requieren tres capacidades:
Un conjunto completo y confiable de pruebas automatizadas que validan que estamos en una implementación
estado.
Una cultura que "detiene toda la línea de producción" cuando nuestras pruebas de validación fallan.
Desarrolladores que trabajan en pequeños lotes en el tronco en lugar de ramas características de larga duración.
En la siguiente sección, describimos por qué se necesitan pruebas automatizadas rápidas y confiables y cómo
para construirlo
Supongamos que tenemos un equipo de diez desarrolladores, y todos verifican su código en la versión
control diario, y un desarrollador introduce un cambio que rompe nuestra compilación y prueba nocturna
trabajo. En este escenario, cuando descubrimos al día siguiente que ya no tenemos una construcción verde,
nuestro equipo de desarrollo tardará minutos, o más horas, en determinar qué
El cambio causó el problema, quién lo introdujo y cómo solucionarlo.
Peor aún, suponga que el problema no fue causado por un cambio de código, sino que se debió a una prueba
problema de entorno (p. ej., una configuración incorrecta en alguna parte). El desarrollo
el equipo puede creer que resolvió el problema porque todas las pruebas unitarias pasan, solo para
descubre que las pruebas seguirán fallando más tarde esa noche.
Para complicar aún más el problema, se habrán registrado diez cambios más en la versión
control por el equipo ese día. Cada uno de estos cambios tiene el potencial de introducir más
errores que podrían romper nuestras pruebas automatizadas, aumentando aún más la dificultad de tener éxito
diagnosticando y solucionando el problema.
Page 159
otros desarrolladores verifican sus cambios en el control de versiones cada día. El resultado es que
nuestras compilaciones y pruebas automatizadas se rompen con frecuencia, y los desarrolladores incluso dejan de verificar
sus cambios en el control de versiones ("¿Por qué molestarse, ya que las compilaciones y las pruebas son siempre
¿roto?"). En cambio, esperan para integrar su código al final del proyecto, lo que resulta en todo
los resultados no deseados del gran tamaño de lote, integraciones de big bang y producción
despliegues‡‡
Para evitar este escenario, necesitamos pruebas automáticas rápidas que se ejecuten dentro de nuestra compilación y prueba
entornos cada vez que se introduce un nuevo cambio en el control de versiones. De esta manera nosotros
puede encontrar y solucionar cualquier problema de inmediato, como el ejemplo del servidor web de Google
demostrado Al hacer esto, nos aseguramos de que nuestros lotes sigan siendo pequeños y, en cualquier momento dado
a tiempo, permanecemos en un estado desplegable.
En general, las pruebas automatizadas se dividen en una de las siguientes categorías, de la más rápida a la más lenta:
Pruebas unitarias : por lo general, prueban un único método, clase o función de forma aislada,
Brindar al desarrollador la seguridad de que su código funciona según lo diseñado. Para muchos
razones, incluida la necesidad de mantener nuestras pruebas rápidas y sin estado, las pruebas unitarias suelen "
fuera "de bases de datos y otras dependencias externas (por ejemplo, las funciones se modifican para devolver
valores estáticos predefinidos, en lugar de llamar a la base de datos real).§§
Pruebas de integración : las pruebas de integración son donde nos aseguramos de que nuestra aplicación sea correcta
interactúa con otras aplicaciones y servicios de producción, en lugar de llamar a stubbed
fuera de las interfaces. Como observan Humble y Farley, "gran parte del trabajo en el SIT
El entorno implica la implementación de nuevas versiones de cada una de las aplicaciones hasta que todas
cooperar. En esta situación, la prueba de humo suele ser un conjunto completo de aceptación
pruebas que se ejecutan contra toda la aplicación ". Las pruebas de integración se realizan en compilaciones
Al enfrentar presiones de fecha límite, los desarrolladores pueden dejar de crear pruebas unitarias como parte de su
trabajo diario, independientemente de cómo hayamos definido 'hecho'. Para detectar esto, podemos elegir
medir y hacer visible nuestra cobertura de prueba (en función del número de clases, líneas de
160 de 1189.
código, permutaciones, etc.), incluso puede fallar nuestro conjunto de pruebas de validación cuando cae por debajo
cierto nivel (p. ej., cuando menos del 80% de nuestras clases tienen pruebas unitarias).¶¶
Martin Fowler observa que, en general, "una construcción de diez minutos [y un proceso de prueba] es perfectamente
dentro de lo razonable ... [Primero] hacemos la compilación y ejecutamos pruebas que son unidades más localizadas
pruebas con la base de datos completamente apagada. Tales pruebas pueden ejecutarse muy rápido, manteniéndose dentro de
La directriz de diez minutos. Sin embargo, cualquier error que implique interacciones a mayor escala,
particularmente aquellos que involucran la base de datos real, no se encontrarán. La construcción de la segunda etapa se ejecuta
un conjunto diferente de pruebas [pruebas de aceptación] que llegan a la base de datos real e involucran más
comportamiento de extremo a extremo. Esta suite puede tardar un par de horas en ejecutarse ".
Otro corolario de este principio es que cualquier error debe encontrarse con el más rápido.
categoría de prueba posible. Si la mayoría de nuestros errores se encuentran en nuestra aceptación y
pruebas de integración, los comentarios que brindamos a los desarrolladores son mucho más lentos que
con pruebas unitarias, y las pruebas de integración requieren el uso de pruebas de integración escasas y complejas
entornos, que solo pueden ser utilizados por un equipo a la vez, lo que retrasa aún más los comentarios.
Además, no solo los errores detectados durante las pruebas de integración son difíciles y el tiempo
consumir para los desarrolladores reproducir, incluso validar que se ha solucionado es difícil
(es decir, un desarrollador crea una solución pero luego necesita esperar cuatro horas para saber si el
las pruebas de integración ahora pasan).
Por lo tanto, siempre que encontremos un error con una prueba de aceptación o integración, debemos
cree una prueba unitaria que pueda encontrar el error más rápido, antes y más barato. Martin Fowler
describió la noción de la "pirámide de prueba ideal", donde podemos capturar la mayoría de nuestros
errores al usar nuestras pruebas unitarias. (Verfigura 14.) En contraste, en muchos programas de prueba el
lo inverso es cierto, donde la mayor parte de la inversión se realiza en pruebas manuales y de integración.
Page 161
Si encontramos que la unidad o las pruebas de aceptación son demasiado difíciles y caras de escribir y
mantener, es probable que tengamos una arquitectura que esté demasiado unida, donde sea fuerte
La separación entre los límites de nuestro módulo ya no existe (o tal vez nunca existió). En
En este caso, tendremos que crear un sistema más débilmente acoplado para que los módulos puedan ser
probado de forma independiente sin entornos de integración. Conjuntos de pruebas de aceptación incluso para
Son posibles las aplicaciones más complejas que se ejecutan en minutos.
Hacemos que cualquier compilación que pase todas nuestras pruebas automatizadas esté disponible para su uso para exploración
pruebas, así como para otras formas de pruebas manuales o intensivas en recursos (como
pruebas de rendimiento). Queremos hacer todas estas pruebas con la mayor frecuencia posible y práctica,
ya sea continuamente o en un horario.
Cualquier probador (que incluye a todos nuestros desarrolladores) debe usar la última compilación que haya pasado
todas las pruebas automatizadas, en lugar de esperar a que los desarrolladores marquen una compilación específica como lista
Probar. Al hacer esto, nos aseguramos de que las pruebas se realicen lo antes posible en el proceso.
Page 162
Esta técnica fue desarrollada por Kent Beck a fines de la década de 1990 como parte de Extreme
Programación, y tiene los siguientes tres pasos:
1. Asegúrese de que las pruebas fallen. "Escriba una prueba para el próximo bit de funcionalidad que desea agregar".
Registrarse.
2. Asegúrese de que las pruebas pasen. "Escriba el código funcional hasta que pase la prueba".
3. "Refactorice el código nuevo y el antiguo para hacerlo bien estructurado". Asegúrese de que las pruebas pasen.
Regístrese nuevamente.
Estas suites de pruebas automatizadas se registran en el control de versiones junto con nuestro código, que
proporciona una especificación actualizada y viva del sistema. Desarrolladores que deseen entender
cómo usar el sistema puede ver este conjunto de pruebas para encontrar ejemplos de trabajo sobre cómo usar el
API del sistema. ***
Al hacer esto, permitimos que todos nuestros probadores (que, por supuesto, incluyen desarrolladores) trabajen en
actividades de alto valor que no pueden automatizarse, como pruebas exploratorias o mejoras
El proceso de prueba en sí.
Sin embargo, la simple automatización de todas nuestras pruebas manuales puede crear resultados no deseados.
no quiere pruebas automatizadas que no sean confiables o generen falsos positivos (es decir, pruebas que
debería haber pasado porque el código es funcionalmente correcto pero falló debido a problemas como
como rendimiento lento, causando tiempos de espera, estado de inicio no controlado o estado no deseado
debido al uso de stubs de bases de datos o entornos de prueba compartidos).
Las pruebas poco confiables que generan falsos positivos crean problemas importantes: desperdician
tiempo valioso (por ejemplo, obligar a los desarrolladores a volver a ejecutar la prueba para determinar si hay
en realidad un problema), aumentar el esfuerzo general de ejecutar e interpretar los resultados de nuestras pruebas,
y a menudo resultan en desarrolladores estresados que ignoran los resultados de las pruebas por completo o apagan el
pruebas automatizadas a favor de centrarse en la creación de código.
El resultado es siempre el mismo: detectamos los problemas más tarde, los problemas son más difíciles
para arreglar, y nuestros clientes tienen peores resultados, lo que a su vez crea estrés en todo el
flujo de valor.
Para mitigar esto, un pequeño número de pruebas confiables y automatizadas son casi siempre
preferible a una gran cantidad de pruebas automáticas manuales o poco confiables. por lo tanto, nosotros
enfóquese en automatizar solo las pruebas que realmente validan los objetivos comerciales que estamos intentando
conseguir. Si abandonar una prueba da como resultado defectos de producción, debemos agregarla nuevamente a nuestro
conjunto de pruebas manuales, con el ideal de eventualmente automatizarlo.
Page 163
ejecutar 1.300 pruebas manuales que realizamos cada diez días para ejecutar solo diez pruebas automatizadas
en cada confirmación de código: es mucho mejor ejecutar algunas pruebas en las que confiamos que ejecutar pruebas
que no son confiables Con el tiempo, crecimos este conjunto de pruebas para tener cientos de miles de
pruebas automatizadas ".
En otras palabras, comenzamos con una pequeña cantidad de pruebas automáticas confiables y las agregamos
con el tiempo, creando un nivel de seguridad cada vez mayor de que detectaremos rápidamente cualquier
cambios en el sistema que nos sacan de un estado desplegable.
Nuestro objetivo es escribir y ejecutar pruebas de rendimiento automatizadas que validen nuestro rendimiento
en toda la pila de aplicaciones (código, base de datos, almacenamiento, red, virtualización, etc.) como
parte de la tubería de implementación, por lo que detectamos problemas temprano, cuando las soluciones son más baratas
Y más rápido.
Cuando los tiempos de consulta de nuestra base de datos crecen de forma no lineal (por ejemplo, olvidamos activar la base de datos)
indexación, y la carga de la página va de cien minutos a treinta segundos).
Cuando un cambio de código provoca la cantidad de llamadas a la base de datos, uso de almacenamiento o tráfico de red
para aumentar diez veces.
Cuando tenemos pruebas de aceptación que se pueden ejecutar en paralelo, podemos usarlas como
base de nuestras pruebas de rendimiento. Por ejemplo, supongamos que ejecutamos un sitio de comercio electrónico y tenemos
identificó "buscar" y "pagar" como dos operaciones de alto valor que deben funcionar bien
bajo carga Para probar esto, podemos ejecutar miles de pruebas de aceptación de búsqueda paralelas
simultáneamente con miles de pruebas de pago en paralelo.
Debido a la gran cantidad de cómputo y E / S que se requieren para ejecutar pruebas de rendimiento,
crear un entorno de prueba de rendimiento puede ser fácilmente más complejo que crear
entorno de producción para la aplicación en sí. Debido a esto, podemos construir nuestro
entorno de pruebas de rendimiento al comienzo de cualquier proyecto y asegúrese de que nos dediquemos
Cualesquiera recursos sean necesarios para construirlo temprano y correctamente.
Para encontrar problemas de rendimiento temprano, debemos registrar los resultados de rendimiento y evaluar cada
rendimiento contra resultados anteriores. Por ejemplo, podríamos fallar las pruebas de rendimiento
si el rendimiento se desvía más del 2% de la ejecución anterior.
Page 164
Además de probar que nuestro código funciona como está diseñado y funciona bajo
cargas similares a la producción, también queremos validar cualquier otro atributo del sistema que nos importa
acerca de. A menudo se denominan requisitos no funcionales, que incluyen disponibilidad,
escalabilidad, capacidad, seguridad, etc.
Cuando usamos la infraestructura como herramientas de gestión de configuración de código (por ejemplo, Puppet, Chef,
Ansible, Salt, Bosh), podemos usar los mismos marcos de prueba que usamos para probar nuestro código para
también compruebe que nuestros entornos están configurados y funcionan correctamente (p. ej., codificación
pruebas ambientales en pruebas de pepino o pepinillo).
Además, similar a cómo ejecutamos herramientas de análisis en nuestra aplicación en nuestro despliegue
tubería (por ejemplo, análisis de código estático, análisis de cobertura de prueba), debemos ejecutar herramientas que analicen
el código que construye nuestros entornos (p. ej., Foodcritic para Chef, puppet-lint para
Marioneta). También deberíamos ejecutar cualquier control de seguridad como parte de nuestras pruebas automatizadas.
para garantizar que todo esté configurado de forma segura y correcta (p. ej., especificaciones del servidor).
En cualquier momento, nuestras pruebas automatizadas pueden validar que tenemos una construcción ecológica y que
Estamos en un estado desplegable. Ahora, debemos crear un cable Andon para que cuando alguien
rompe la tubería de implementación, tomamos todos los pasos necesarios para volver a una construcción ecológica
estado.
Cuando tenemos una construcción ecológica en nuestra tubería de implementación, tenemos un alto grado de
confianza en que nuestro código y entorno funcionarán según lo diseñado cuando implementemos nuestro
cambios en producción.
Para mantener nuestro canal de implementación en un estado verde, crearemos un Andon virtual
Cordón, similar al físico en el sistema de producción de Toyota. Cuando alguien
introduce un cambio que hace que nuestras compilaciones o pruebas automatizadas fallen, no se permite ningún trabajo nuevo
para ingresar al sistema hasta que se solucione el problema. Y si alguien necesita ayuda para resolver el
problema, pueden traer cualquier ayuda que necesiten, como en el ejemplo de Google en el
comienzo de este capítulo.
Page 165
Cuando fallan las etapas posteriores de la tubería de implementación, como las pruebas de aceptación o el rendimiento
pruebas, en lugar de detener todo el trabajo nuevo, tendremos desarrolladores y probadores de guardia que están
responsable de solucionar estos problemas de inmediato. También deberían crear nuevas pruebas que
ejecutar en una etapa anterior en la tubería de implementación para detectar cualquier regresión futura. por
ejemplo, si descubrimos un defecto en nuestras pruebas de aceptación, deberíamos escribir una prueba unitaria para detectar
el problema. Del mismo modo, si descubrimos un defecto en las pruebas exploratorias, deberíamos escribir una unidad
o prueba de aceptación.
Para aumentar la visibilidad de las fallas de prueba automatizadas, debemos crear altamente visibles
indicadores para que todo el equipo pueda ver cuándo fallan nuestras pruebas de compilación o automatizadas.
Muchos equipos han creado luces de construcción altamente visibles que se montan en una pared, lo que indica
el estado de compilación actual u otras formas divertidas de decirle al equipo que la compilación está rota, incluyendo
lámparas de lava, reproducción de una muestra de voz o canción, klaxons, semáforos, etc.
En muchos sentidos, este paso es más desafiante que crear nuestras compilaciones y servidores de prueba:
esas eran actividades puramente técnicas, mientras que este paso requiere cambiar el comportamiento humano
e incentivos. Sin embargo, la integración continua y la entrega continua requieren estos
cambios, como exploramos en la siguiente sección.
Alguien registra el código que rompe la compilación o nuestras pruebas automatizadas, pero nadie corrige
eso.
Alguien más registra otro cambio en la construcción rota, que tampoco pasa
nuestras pruebas automatizadas, pero nadie ve los resultados fallidos de las pruebas que habrían permitido
Nuestras pruebas existentes no se ejecutan de manera confiable, por lo que es muy poco probable que creemos nuevas pruebas. (Por qué
¿molestia? Ni siquiera podemos ejecutar las pruebas actuales).
Cuando esto sucede, nuestras implementaciones en cualquier entorno se vuelven tan poco confiables como cuando
no tenía pruebas automatizadas o estaba utilizando un método de cascada, donde la mayoría de nuestros
Se están descubriendo problemas en la producción. El resultado inevitable de este círculo vicioso es
que terminamos donde comenzamos, con una impredecible "fase de estabilización" que lleva
semanas o meses en los que todo nuestro equipo está sumido en una crisis, tratando de hacer que todas nuestras pruebas
aprobar, tomar atajos debido a las presiones de la fecha límite y aumentar nuestra deuda técnica. ‡‡‡
CONCLUSIÓN
En este capítulo, hemos creado un conjunto completo de pruebas automatizadas para confirmar que
tener una construcción verde que todavía está en un estado pasable y desplegable. Hemos organizado nuestra prueba
suites y actividades de prueba en una tubería de implementación. También hemos creado lo cultural
norma de hacer lo que sea necesario para volver a un estado de construcción verde si alguien introduce un
cambio que rompe cualquiera de nuestras pruebas automatizadas.
Al hacer esto, preparamos el escenario para implementar la integración continua, lo que permite
muchos equipos pequeños para desarrollar, probar e implementar código de forma independiente y segura en
producción, entregando valor a los clientes.
† Bland describió que en Google, una de las consecuencias de tener tantos desarrolladores talentosos fue que creó el "síndrome impostor", un término acuñado por
psicólogos para describir informalmente a personas que no pueden internalizar sus logros. Wikipedia afirma que "a pesar de la evidencia externa de su
competencia, quienes exhiben el síndrome siguen convencidos de que son fraudes y no merecen el éxito que han logrado. La prueba de éxito es
descartados como suerte, oportunidad o como resultado de engañar a otros para que piensen que son más inteligentes y competentes de lo que creen ser ".
‡ Crearon programas de capacitación, publicaron el famoso boletín de pruebas en el inodoro (que publicaron en los baños), la hoja de ruta de Test Certified y
programa de certificación, y llevó varios días de "arreglo" (es decir, bombardeos de mejora), que ayudaron a los equipos a mejorar sus procesos de prueba automatizados para que
podría replicar los sorprendentes resultados que el equipo de GWS pudo lograr.
§ En Desarrollo, la integración continua a menudo se refiere a la integración continua de múltiples ramas de código en el tronco y asegurar que pase la unidad
pruebas Sin embargo, en el contexto de la entrega continua y DevOps, la integración continua también exige la ejecución en entornos similares a la producción y
pasando las pruebas de aceptación e integración. Jez Humble y David Farley desambiguan estos llamando al último CI +. En este libro, integración continua
siempre se referirá a las prácticas de CI +.
¶ Si creamos contenedores en nuestra canalización de implementación y tenemos una arquitectura como microservicios, podemos permitir que cada desarrollador cree inmutables
artefactos donde los desarrolladores ensamblan y ejecutan todos los componentes de servicio en un entorno idéntico a la producción en su estación de trabajo. Esto permite
desarrolladores para construir y ejecutar más pruebas en su estación de trabajo en lugar de en servidores de prueba, dándonos comentarios aún más rápidos sobre su trabajo.
** Incluso podemos requerir que estas herramientas se ejecuten antes de que se acepten cambios en el control de versiones (por ejemplo, obtener ganchos de precompromiso). También podemos ejecutar estas herramientas
dentro del entorno de desarrollo integrado del desarrollador (IDE; donde el desarrollador edita, compila y ejecuta código), lo que crea un código aún más rápido
Bucle de retroalimentación.
†† También podemos usar contenedores, como Docker, como mecanismo de embalaje. Los contenedores permiten la capacidad de escribir una vez, ejecutar en cualquier lugar. Estos contenedores
se crean como parte de nuestro proceso de compilación y se pueden implementar y ejecutar rápidamente en cualquier entorno. Porque el mismo contenedor se ejecuta en cada
entorno, ayudamos a reforzar la consistencia de todos nuestros artefactos de construcción.
§§ Existe una amplia categoría de técnicas arquitectónicas y de prueba utilizadas para manejar los problemas de las pruebas que requieren aportes de puntos de integración externos,
incluidos "talones", "simulacros", "virtualización de servicios", etc. Esto se vuelve aún más importante para las pruebas de aceptación e integración, que colocan
mucha más dependencia de estados externos.
¶¶ Deberíamos hacer esto solo cuando nuestros equipos ya valoran las pruebas automatizadas: este tipo de métrica es fácilmente elegible por desarrolladores y gerentes.
*** Nachi Nagappan, E. Michael Maximilien y Laurie Williams (de Microsoft Research, IBM Almaden Labs y North Carolina State University,
respectivamente) realizó un estudio que mostró que los equipos que utilizan el código TDD produjeron un 60% -90% mejor en términos de densidad de defectos que los equipos que no son TDD, mientras que
demorando solo 15% –35% más.
††† Si el proceso para deshacer el código no es bien conocido, una posible contramedida es programar un par de reversiones programadas , para que pueda ser mejor
documentado
‡‡‡ Esto a veces se denomina antipatrón de caída de Scrum de agua , que se refiere a cuando una organización afirma estar utilizando prácticas similares a las de Agile, pero, en realidad,
Todas las pruebas y la reparación de defectos se realizan al final del proyecto.
11 Habilitar y practicar
Integración continua
Page 169
170 de 1189.
Página 171
Page 172
Page 173
Aquí hay un último efecto secundario preocupante del gran tamaño de lote
fusiones: cuando la fusión es difícil, nos volvemos menos capaces
y motivado para mejorar y refactorizar nuestro código, porque
Page 176
Page 177
Page 178
Caso de estudio
Integración continua en Bazaarvoice
(2012)
Ernest Mueller, quien ayudó a diseñar DevOps
transformación en National Instruments, luego ayudó
transformar los procesos de desarrollo y lanzamiento
en Bazaarvoice en 2012. Suministros de Bazaarvoice
contenido generado por el cliente (p. ej., reseñas, calificaciones)
para miles de minoristas, como Best Buy, Nike,
y Walmart
Page 179
Page 180
Página 181
CONCLUSIÓN
† La ramificación en el control de versiones se ha usado de muchas maneras, pero generalmente se usa para dividir el trabajo
entre los miembros del equipo por lanzamiento, promoción, tarea, componente, plataformas tecnológicas, etc.
adelante.
‡ Se utilizaron indicadores de compilación (#define y #ifdef) para habilitar / deshabilitar la ejecución del código en presencia de
copiadoras, tamaño de papel compatible, etc.
12 Automatizar y habilitar
Lanzamientos de bajo riesgo
Justo antes del impulso de producción, todos los desarrolladores que tengan cambios deben estar presentes.
y verifique en su canal de chat IRC: cualquier desarrollador que no esté presente tendrá sus cambios
eliminado automáticamente del paquete de implementación. Rossi continuó: "Si todo parece
bueno y nuestros paneles de prueba y pruebas canarias† son verdes, presionamos el gran botón rojo y
toda la flota de servidores de Facebook.com recibe el nuevo código. Dentro de veinte minutos,
miles y miles de máquinas tienen un nuevo código sin impacto visible para el
personas que usan el sitio ". ‡
Más tarde ese año, Rossi duplicó su frecuencia de lanzamiento de software a dos veces al día. Él explicó
que el segundo impulso de código le dio a los ingenieros que no están en la costa oeste de los Estados Unidos la capacidad de "moverse
y enviar tan rápido como cualquier otro ingeniero en la empresa ", y también les dio a todos un segundo
oportunidad cada día para enviar código y lanzar funciones.
Page 185
Al usar la integración continua y hacer que la implementación del código sea un proceso de bajo riesgo, Facebook
ha permitido que el despliegue de código sea parte del trabajo diario de todos y sostenga al desarrollador
productividad. Esto requiere que la implementación del código sea automatizada, repetible y
previsible. En las prácticas descritas en el libro hasta ahora, a pesar de que nuestro código y
los entornos se han probado juntos, lo más probable es que no estemos implementando