La innovación, nuestra razón de ser
Hace no tanto tiempo, nuestro proceso de desarrollo se basaba en ant, manteníamos nuestras dependencias de una forma no muy ortodoxa y utilizábamos una serie de scripts manuales para la construcción y entrega de los paquetes de proyectos y productos. Los procesos de merge eran una auténtica pesadilla y perdíamos una gran cantidad de tiempo realizando tareas manuales y formando a nuevos colegas en "nuestra forma de hacer las cosas". La verdad es que, a medida que pasa el tiempo, me pregunto una y otra vez como podíamos trabajar así.
Sea como sea, tomamos la decisión de cambiar, cambiando todo de arriba-abajo. Esto supuso cambiar nuestro sistema de versionando y, fundamentalmente, los procesos de construcción y desarrollo. Cambiamos muchísimas cosas y, he de reconocer, que no fue fácil, para nada. Nos supuso sopesar las cosas importantes y las no tan importantes y como podíamos mejorar el proceso de entrada de nuevos compañeros de viaje.
En los siguientes puntos me voy a enfocar en los diferentes problemas que tuvimos que abordar
La verdad sea dicha, cambiar el sistema de versionado no puede considerarse como una tarea en si mismo. A fin de cuentas, es solo un cambio de herramienta.
Aunque esto es cierto, si me gustaría destacar algunos puntos, sólo por si os encontráis en una situación parecida.
En cualquier caso, no me arrepiento en absoluto de haber comenzado a utilizar Git. Era un paso necesario en el cambio que intentábamos implantar, la mejora de nuestro proceso de construcción.
Lo mejor que puedo decir de como trabajábamos es que usábamos algo "hecho en casa", creo que con eso se dice todo. Dudo, de hecho, de que pudiéramos llamar, con propiedad, gestión de dependencias a lo que teníamos hecho. El empaquetado de los proyectos se hacía en base a scripts en shell, utilizando sustitución de variables y todas esas cosas. Funcionaba, si bien funcionar no es suficiente, puesto que debe ser mantenible y repetible y, lógicamente, a medida que se incorporan nuevas personas reemplazar las viejas vía se convierte en una necesidad.
Si nos limitamos a cambiar de herramientas, el cambio no parece tan complejo, en resumen comenzamos a utilizar Nexus, los procesos de CI de Gitlab, integramos SonarQube y procedimos a entregar nuestros paquetes a través de Docker. Bastante sencillo y estándar, ¿no?
Pues no, no es simple en absoluto, si miramos las tripas hay una gran variedad de procesos involucrados, cambios que deben hacerse y aspectos que deben tratarse de alguna forma, para volver a hacerlos de otra en unas pocas semanas o meses, una vez el proceso se haya consolidado. En resumen, el cambio que asumimos fue,
Sin ninguna duda, de todas las tareas que realizamos ésta fue la más compleja. No queríamos una aproximación simplista y cosmética, puesto que, a fin de cuentas, lo que buscábamos no era sólo mejorar el proceso de integración continua sino asegurarnos de que el cambio desembocara en una mejora de la productividad para nuestros desarrolladores y nuestros equipos de operación.
Nuevamente, cambiamos la herramienta, nos olvidamos de ant y pasamos a utilizar Gradle. Pero, creedme, el problema no era cambiar la herramienta, sino las cosas que hacíamos con ella. Destacando algunas de ellas me quedaría con:
Cambiar no es fácil, pero eso no quiere decir que no sea necesario. Hacer siempre lo mismo sólo conduce al estancamiento y el estancamiento solo conduce a la desaparición.
Si os preguntáis por el esfuerzo os diré que el cambio completo nos llevo un año de trabajo de más o menos una persona y media. Aprendimos mucho, pero sobre todo mejoramos muchísimo y además nos ha permitido saber que tenemos todavía mucho por hacer.
Abrazad el cambio, no dudéis en hacer las cosas que deben hacerse.