¿Qué es un DevOps?
Primero nos vamos a centrar a una definición, veamos lo que dice la Wikipedia
“DevOps es un acrónimo inglés de development (desarrollo) y operations (operaciones), que se refiere a una metodología de desarrollo de software que se centra en la comunicación, colaboración e integración entre desarrolladores de software y los profesionales de sistemas en las tecnologías de la información (IT)”.*DevOps es una respuesta a la interdependencia del desarrollo de software y las operaciones IT. Su objetivo es ayudar a una organización a producir productos y servicios software más rápidamente, de mejor calidad y a un coste menor.
Las empresas con entregas (releases) muy frecuentes podrían requerir conocimientos de DevOps. Flickr desarrolló un sistema DevOps para cumplir un requisito de negocio de diez despliegues diarios. A este tipo de sistemas se les conoce como despliegue continuo (continuous deployment) o entrega continua (continuous delivery), y suelen estar asociados a metodologías lean startup. Grupos de trabajo, asociaciones profesionales y blogs usan el término desde 2009".
Podemos ver la fuente de esto con los mismos desarrolladores de Flickr en una charla que los mismos John Allspawh y Paul Hammond daban sus primeras pinceladas a lo que debería ser la integración y el despliegue continuo y entender la necesidad de tratar la infraestructura como código ya por el año 2009
La verdad es que un año antes en el 2008 ya se empezó hablar por parte de Patrick Debois
“Agile Operations and Infraestructure: How Infra-gile are you?
En la conferencia Agile del 2008 en Toronto. Tal y como podemos observar la idea ya lleva rondando alrededor de 10 años y durante este tiempo, las empresas han aplicado en función de sus necesidades, o bien tal y como lo han interpretado.
¿Pero entonces que es un DevOps?
Si tomamos otra definición más reciente como la que nos proporciona Microsoft
El término DevOps, que es una combinación de los términos ingleses development (desarrollo) y operations (operaciones), designa la unión de personas, procesos y tecnología para ofrecer valor a los clientes de forma constante. ¿Qué significa DevOps para los equipos? DevOps permite que los roles que antes estaban aislados (desarrollo, operaciones de TI, ingeniería de la calidad y seguridad) se coordinen y colaboren para producir productos mejores y más confiables. Al adoptar una cultura de DevOps junto con prácticas y herramientas de DevOps, los equipos adquieren la capacidad de responder mejor a las necesidades de los clientes, aumentar la confianza en las aplicaciones que crean y alcanzar los objetivos empresariales en menos tiempo.
Tal y como podemos observar en ninguna de las dos definiciones anteriores deja claro realmente lo que es , ¿ Es un puesto, es una filosofía, o es un mono tocando la pandereta?
Google también tiene su definición del mismo.
DevOps es un movimiento organizativo y cultural que tiene como objetivo aumentar la velocidad de entrega de software, mejorar la confiabilidad de los servicios y crear una propiedad compartida entre las partes interesadas en el software. Aprende a mejorar la velocidad, estabilidad, disponibilidad y seguridad de tu capacidad de entrega de software.
Y aquí Google da desde mi punto de vista una idea clarificante:
DevOps es un movimiento organizativo y cultural que tiene como objetivo aumentar la velocidad de entrega de software
Desde luego concuerda mucho con la charla de Carlos Buenos Vinos en el ctosummit que celebramos el año pasado en Valencia en Geekshubs, que el tituló deliveritis aguda
Y como él mismo marcaba en la charla:
Delibery first es una actitud.
¿Para mí que es DevOps?
Bueno pues es hora de mojarse, desde mi punto de vista DevOps es una filosofía o actitud, que nos permita entregar cuanto antes nuestro software, y que nos añada valor a todo el proceso de desarrollo en un proyecto.
Bien pero alguien tiene que realizar esas tareas, y aquí es donde añado un poco más a la definición, la empresa que haga o aplique “DevOps” debería tener una persona o rol que también sea un facilitador, y cuando digo un facilitador me refiero una persona que pueda ayudar con las herramientas suficientes para conseguir dicho objetivo, y sobre todo sea capaz de poner a tierra las necesidades reales del proyecto para evitar sobre-ingeniería que complique todo el proceso y la vida de los desarrolladores.
Ahora mismo tal y como esta todo éste mundillo la verdad es que el que quiera aplicar DevOps no lo tienen nada fácil en estos últimos años con la evolución del cloud sólo hay que darse una vuelta por la web de la Cloud Native Computing Foundation para darse cuenta la cantidad de tecnologías que disponemos. Por eso es importante que junto con el equipo de desarrollo, el contexto del proyecto y la situación del mismo poder decidir que aplicar y que no, a veces simplemente con una virtualización con ayuda de Vagrant o [Docker](https://www.docker.com/ que nos permita homogeneizar los diferentes entornos de desarrollo, aplicar o utilizar Git, y la integración de alguna herramienta externa como Travis-ci o Circle-ci, puede ayudar a dar un paso exponencial en la puesta a valor de nuestro producto, a la detección de errores, y en definitiva a la calidad de nuestro proyecto.
A otras soluciones más complejas simplemente por ser tecnologías más tendentes o la moda del momento.
En fin es mi modesta opinión, y espero que ayude a clarificar un poco la ideas. De todos los modos os dejo un enlace sobre el Bootcamp de Devops que realizamos en Geekshubs Academy, por si alguien quiere aprender un poco más sobre el tema.
Bueno en otro post hablaremos sobre la función del SRE Site Reliability Engineering .
Hasta pronto.