Continuous Delivery: Partos Sin Dolor

El presentar al mundo nuestras creaciones puede ser uno de nuestros más grandes temores. Publicar una canción, postear una foto en Instagram, poner en linea un Sitio Web o incluso publicar un Blog Post (como este), están cargados de una sentimiento que mezcla temor y expectación simultáneamente.

En el caso de la tecnología, y en específico del Software, los que tenemos el privilegio de trabajar en este arte experimentamos esa sensación en cada ocasión que “nuestros bebés van a salir al mundo”, ó en otras palabras, cuando colocamos nuestro Software en Producción!

Y preguntarás: “Pero JJ, cómo lidiar con esto?”…..¡Qué bueno que preguntas! :). La filosofía DevOps tiene algunos secretos para minimizar el dolor de este “parto”.


Pausa para entender la Jerga DevOps

Product Release = Hacer pública de la versión más reciente de un producto (obviamente, en Producción).

Deployment = Instalar, testear y configurar el producto en un ambiente, por ejemplo: Desarrollo o Pre-Producción. Un Deployment puede realizase incluso a Producción, sin hacerlo visible para el público hasta el momento del Product Release.

Ejemplos:

  • “Dale, hagamos el Deployment de la versión 2.0.3 a Producción.”
  • “El Deployment del Release 2.0.3. fue un éxito!” (Sí, con un poco de esfuerzo, esas palabras saldrá de tu boca con frecuencia 🙂  )

Ya que tenemos las cosas claras, prosigamos:


Estos son algunos de los síntomas de un Product Release doloroso:

  • Releases poco frecuentes
    • Cuando mencioné “partos”, hablaba figurativamente!. No quiere decir que tienes que esperar 9 meses para tener Releases.Baby on Google Android 9.0
    • Menos de 4 Releases por año es un pecado.
  • Deployments Manuales
    • Los humanos no están hechos para realizar tareas repetitivas. Punto.
    • Tener a un humano copiando/pegando manualmente una App en Producción tiene un riesgo altísimo, especialmente si es alguien que está cansado o distraído (o hambriento! #trueStory).
  • Bugs encontrados en Producción inmediatamente luego del Release.
    • Solo puedo preguntar: “Y….qué pasó con el testeo?” Lady Beetle on Apple iOS 11.3Lady Beetle on Apple iOS 11.3Lady Beetle on Apple iOS 11.3
  • Dev Box: el Ambiente de Pruebas
    • Me dices que el testing fue realizado en las máquinas de los Desarrolladores?Desktop Computer on WhatsApp 2.17 Estas consciente de que ese “ambiente” tiene el mismo grado de higiene que un toilet público en un concierto? Toilet on Apple iOS 11.3
  • Viernes de Release
    • Release en Viernes por la noche …por si algo sale mal“. ¿Realmente tienes tan poca confianza en tu deployment (el cual ya debería estar automatizado) como para darte 30+ horas por si “algo sale mal”?

Si algo duele, hazlo más frecuentemente.

Cuando Martin Fowler dice “Si algo duele, hazlo más frecuentemente1 , se refiere a la búsqueda continua de los estresores que aportan al progreso. Ejemplo de la vida no-digital:

  • Después de un mes de inactividad física, volver a entrenar en el gimnasio causará dolor muscular intenso, el mismo que será reducido considerablemente al mantener una frecuencia de entrenamiento regular.Flexed Biceps on Apple iOS 6.0
  • Al aprender la parte complicada de una canción en guitarra o piano, nuestras neuronas son expuestas a un estrés que, mientras más veces sea repetido – de manera enfocadaDirect Hit on Samsung Experience 9.5– , hará la tarea más sencilla hasta lograr dominarla.Musical Notes on Apple iOS 11.3

A pesar de sonar contraproducente, estas son pruebas tangibles de los beneficios de desafiar nuestros temores e incomodidades frecuentemente. Y, mientras más lo hacemos, más confianza en nosotros mismos tenemos, por ende, pasamos del temor a la curiosidad por saber qué más somos capaces de lograr.

La mentalidad de Continuous Delivery permite a empresas como Amazon ejecutar Releases cada 11.6 segundos. Tal vez tu no requieras realizar deployments a esa velocidad, pero definitivamente quieres utilizar Continuous Delivery para para automatizar aquello que te causa dolor y así evitar problemas y horas extras en el día del Release.

Consejos para lograr Continuous Delivery

Planifica Releases frecuentes

  • La cadencia recomendable de los Releases es entre 2 semanas a 2 meses. Coincidentemente es lo recomendado por Metodologías Ágiles – Principio #3Winking Face on Apple iOS 11.3
  • Si la organización de tu Equipo de Desarrollo está en base a Historias de Usuario y estas no caben en un Sprint, tienes dos alternativas:
  1. Haz tus historias más pequeñas. Siempre hay forma de reducirlas.
  2. Utiliza la técnica de Dark Launch para ocultar funcionalidad que no esta lista.

Automatiza el Deployment al 100%

  • La instalación de Apps – especialmente si es algo tan sencillo como copiar/pegar archivos -, su configuración y verificación deben ser completamente automatizados.
  • No existe una sola herramienta que cubra las necesidades particulares de cada App, pero sí existen bastantes lenguajes de Scripting que te ayudarán a personalizar el Deployment según tus necesidades. Ej: Python, PowerShell, Ruby, etc.

Ejecuta Tests antes del Deployment

  • El proceso automatizado de Deployment (CD Pipeline) es como el muchacho de las pizzasMotor Scooter on Apple iOS 11.3Pizza on Apple iOS 11.3. Si los cocineros preparan una pizza gourmet, el muchacho la entregará rápidamente. Si los cocineros preparan Pile of Poo on Apple iOS 11.3, el muchacho la entregará…rápidamente Confused Face on Apple .
  • No olvides que un Continuous Delivery exitoso va de la mano de Continuous Testing cuando las pruebas están automatizadas.

Utiliza “Placeholders” en tus archivos de configuración.

  • Supongamos que planeas realizar el deployment de un Website, lo más probable es que este contenga un archivo web.config. Puesto que ya sigues la filosofía DevOps y la comunicación entre tus Devs y Ops es fluida, puedes coordinar con ambos equipos para tener “Placeholders” como el de este ejemplo:
    <connectionString Server=”{APP-SERVER}” Database=”{APP-DB}”> 
  • Donde {APP-SERVER} {APP-DB} son los Placeholders que serán reemplazados con valores propios para los Ambientes donde dicho Website vivirá.

Crea un Ambiente de Testing o PreProduccion

  • Ten por lo menos un ambiente sanitizado de Testing o PreProduccion que es una mini-versión de Producción.
  • Como ya tienes tu deployment automatizado y además utilizas Placeholders para personalizar configuración por Ambiente, hacer el deployment en ambientes es pan comido.

Nadie se salva de empezar con Releases dolorosos, esta una especie de de “Bautismo de Fuego”. Siendo así, recuerda que desde el momento que los humanos dominamos al fuegoFire on Apple iOS 11.3, nuestra evolución fue para arriba Rocket on Apple .

Cuál es tu experiencia con Deployments y Releases? Que otras sugerencias tienes?

Deja tu comentario y hagamos que más personas se beneficien.

Keep on learning…and Delivering!

#mayArtOfMemory – Week 3

Welcome to Week 3 of #mayArtOfMemory!

On Week 1 and Week 2, I covered the essential knowledge to understand how memory works and techniques to improve it. On Week 3, what initially was just theoretical information becomes tangible through actual practice.

This post summarizes a very useful memory technique, a gadget and tips to make info stick, the outlier of this week and an actual memory training course. Enjoy it!!

Continue reading “#mayArtOfMemory – Week 3”

#mayArtOfMemory – Week 2

Hi all! Welcome to the summary of #mayArtOfMemory – Week2.

In Week1 we covered a 10,000 feet overview of what is considered memory and how it works. This time, we go hands-on training and things get fun. We’ll cover two mnemonic techniques, an inspiring story, and memory gadgets. “In the first place”2, let’s review the Memory Palace.

Continue reading “#mayArtOfMemory – Week 2”

#aprilDrawing – Summary

Trying to summarize art would be naive. Nevertheless, naiveté is what ignites our curiosity. Therefore, let me try to do my best explaining what drawing is and some keys to get you started with it 🙂

Month: April 2018

Theme: Learn to draw

Mission: Acquire drawing fundamental concepts and train the basic skills to draw from observation of daily life.

You can follow the progress of each week here: Week 1, Week 2, Week 3. You can also follow daily updates on Facebook, Instagram, and Twitter with the tag #aprilDrawing. Continue reading “#aprilDrawing – Summary”

Drawing – Week #3

#aprilDrawing is getting way more fun in Week #3. Learning to draw from photographs and shading are the covered areas this time.

Don’t miss the progress of April’s challenge in Week #1 and Week #2.

Drawing from photographs

Do you remember last week when I said that drawing still life was the most challenging thing that I have done?…well, I was wrong. Drawing from photographs is the new most challenging one (ha!). Continue reading “Drawing – Week #3”

Drawing – Week #1

The first week of #aprilDrawing was intense! I decided to grab the bull by the horns and enrolled in an online class to draw from the very beginning.

Drawing Course

The class chosen was “The Ultimate Drawing Course – Beginner to Advanced” on Udemy. At the time of this post, the course has 150K students enrolled and a members-only Facebook Group where you can post your progress and get feedback from the community. Pretty impressive!

The first assignment was actually an assessment of my drawing skills. This is the Assessment Drawing on a notepad sheet on #day1 and on drawing paper on #day2. Continue reading “Drawing – Week #1”