domingo, 23 de mayo de 2021

Conceptos: Deploy vs Release

Hola a todos,

 

hoy vengo a hablar de dos conceptos importantes, que a veces confundimos: Deploy y release.

 

¿Son lo mismo? ¿Podemos usarlos indistintamente? ¿Siempre que despliego estoy "releaseando"? ¿Necesito necesariamente desplegar para hacer release de nuevas características en mi software?

 

Vamos a entender ambos conceptos y responder a esas preguntas, y para ello comencemos por el primero, "Deploy".


Deploy

 

Deploy es el acto técnico de hacer que un software sea "copiado" a un entorno, y pueda ser utilizado por los usuarios.

 

El mecanismo que usemos para desplegar va a diferir bastante según la tecnología que usemos para nuestra aplicación: no desplegamos igual si nuestra aplicación funciona en Azure App Service (hay que copiar ficheros a

/home/site/wwwroot) o si se ejecuta en un cluster de kubernetes (desplegaríamos subiendo una imagen a un container registry y después dando una instrucción al cluster para usarla).

 

Por otro lado, el despliegue puede ser con parada o sin ella. En el primer caso la aplicación dejará de estar disponible por un tiempo (a poder ser el mínimo posible), mientras que en el segundo (despliegue sin parada) la aplicación estará siempre disponible a los usuarios mientras es actualizada con una nueva versión.

 

Aquí te dejo un enlace a una sesión donde explico técnicas para conseguir despliegues sin parada: Despliega como los grandes: zero downtime deployment.


Release

 

Se trata de hacer que una nueva característica (feature) de la aplicación esté disponible a los usuarios.

 

¿Cómo podemos hacer que una aplicación disponga de una nueva característica? La respuesta parece sencilla: desplegando una nueva versión del software que habilite esa nueva feature.

 

Sin embargo hay más modos, esa nueva feature puede ser "activada" en un momento dado, habiendo estado oculta por un tiempo. Para ello podemos por ejemplo hacer uso de Feature flags, para activar y desactivar features. Y lo que es mejor, puede ser el negocio el que lo haga, sin necesitar conocimiento técnico.

 

Escribiré sobre Feature flags, mientras tanto te dejo este post de Luis Fraile con algunas ideas.


Respondiendo a las preguntas

 

Una vez explicados los conceptos podemos responder a las preguntas anteriores

 

¿Podemos hablar indistintamente de Deploy y de Release?

 

No, como decía el despliegue es una práctica técnica (copiar nuevos bytes para que se ejecuten), mientras que la release es un concepto de negocio, que entrega nuevas features a los usuarios.

 

¿Siempre que despliego estoy "releaseando"?

 

No tiene por qué, podría desplegar una nueva versión que por ejemplo llevase nuevo código (clases), pero que aún no son usadas.

¿Y por qué querría hacer esto? Se escapa del ámbito de este post, de nuevo hablaré sobre ello, mientras tanto te dejo esta sesión de Edu Ferro donde lo entenderás:

 

#SDsummit -  "S3 Small Safe Steps. El secreto de la agilidad", Eduardo Ferro

 

¿Necesito necesariamente desplegar para hacer release de nuevas características en mi software?

 

No, de hecho podemos ofrecer una nueva feature a nuestros clientes, habiéndola desplegado en el pasado y habiéndola mantenido oculta durante un tiempo.


Bola extra: Delivery

 

Ahora que hemos visto la diferencia entre Deploy y Release, añado un nuevo concepto íntimamente relacionado con Agile: Delivery.

 

Uno de los principios del manifiesto ágil dice: "Our highest priority is to satisfy the customer through early and continuous delivery of valuable software"

 

Se habla de entrega (delivery) de software de valor al cliente, pero ¿cómo entregamos valor a un cliente?

 

Con nuevas releases de software, pero también desplegando nuevas versiones de software que aún no entreguen nuevas features, pero que por ejemplo vayan preparando el software para la llegada de dichas features, o que como decíamos, las lleven ocultas.

 

Pero también podemos entregar valor de otros modos, totalmente ajenos al código de nuestra aplicación: Piensa que podríamos entregar valor activando un sistema de telemetría, que permitiese a negocio tomar decisiones… interesante.

 

Hasta aquí mis ideas sobre estos conceptos importantes, ¿estás de acuerdo? ¿quieres matizar algo? 

¡No dudes en comentar aquí o en twitter!

 

Saludos

 

 

No hay comentarios:

Publicar un comentario