Cambiando la forma de hacer desarrollo de software

Gonzalo EstellésPublicado por

Los que llevamos ya tiempo en el mundo del desarrollo de software, tenemos asimilado como “estándar” que las empresas se organicen en varios equipos especializados que colaboran en modo pipeline juntos para alcanzar un mismo objetivo. Podemos clasificar a estos equipos de la siguiente manera:

  • Equipos de cliente y funcionales. Encargados de detectar las nuevas necesidades que demanda el mercado y traducirlas en proyectos de desarrollo. El objetivo no es otro que dar un valor añadido a un determinado producto o servicio software.
  • Equipos de desarrollo y QA (Quality Assurance). Son los equipos de producción del software, con perfiles especializados en determinadas tecnologías o con la etiqueta de multidisciplinares. Materializan las historias de usuario de un cliente en líneas de código. Estos equipos realizan tareas no propias del desarrollo, como garantizar que los trabajos comprometidos por el equipo se entreguen en plazos, cumpliendo expectativas y cumpliendo estándares de calidad.
  • Equipos de explotación, integración y gestión de la configuración. Su función es asegurarse de que se están dotando de una infraestructura necesaria para poder desarrollar, realizar tests automáticos y desplegar en los distintos entornos. Además de vigilar que el servicio esté disponible y sea productivo la mayor cantidad de tiempo posible (alta disponibilidad).

La irrupción de las metodologías ágiles

La irrupción de las metodologías ágiles y la necesidad de entregar incrementos de valor por cada iteración en el menor tiempo posible, dio un giro radical a esta forma de organizarse. La propuesta se apoya en una organización en equipos pequeños y con capacidad multidisciplinar; es decir, sin interdependencia de unos equipos con otros para evitar bloqueos. Esta forma de trabajar ha dado lugar a DevOps, un nuevo paradigma de construcción de software donde ya se integra definitivamente el pipeline que conecta los equipos de desarrollo y explotación.

Hoy día, un equipo de desarrollo debería ser capaz de crear sus propios entornos de forma muy ágil y los desarrolladores deberían poder probar su código en un entorno similar al de producción sin aplicar esfuerzos extras y viceversa. De esta forma se eliminaría la brecha existente entre entornos, disminuyendo riesgos de despliegues y con la posibilidad de llevar un control de cambios de infraestructura mediante el uso de un SCM (Software Configuration Management).

Software: herramientas claves en la modernización y evolución

Hay herramientas que han ido tomando posiciones en el ciclo de desarrollo software para conseguir esta evolución y modernización:

  • Planificadores como Jenkins.
  • Lenguajes de programación de infraestructura como Ansible.
  • Tecnologías de contenedores como Docker, para empaquetar aplicaciones.
  • Kubernetes para proporcionar escalabilidad y alta disponibilidad a los contenedores.
  • Y muchas más, con diversos fines en el pipeline de despliegue.

¿Cómo incorporar las herramientas al ciclo de desarrollo de software?

Como veremos a continuación, existen varias posibilidades:

  1. La primera y más primitiva se basa en recopilar todas las herramientas e implantarlas de forma individualizada, de modo que colaboren todas juntas con una configuración correcta. El problema es que seguimos necesitando equipos para mantener estas herramientas.
  2. Otra opción es usar nubes públicas (como Amazon Web Services, Google Cloud, etc.). En estas, parte de las herramientas ya vienen preconfiguradas y gestionadas, pero sin una parte importante del ciclo de desarrollo. Por tanto, aún tendríamos que preocuparnos en montar y configurar, por ejemplo, los pipelines de despliegues continuos. 

En este vacío es donde aparece OpenShift de Redhat, la tercera opción de implantación. OpenShift integra todas las herramientas necesarias (Git, Jenkins, Ansible, Kubernetes, repositorio de imágenes Docker, etc.) para poder hacer llegar una línea de código hasta un entorno de producción con una mínima configuración. Una herramienta al servicio del desarrollador, que ya no tiene que preocuparse de la infraestructura que hay por debajo para ejecutar sus aplicaciones (PaaS, Platform as a Service).

Los equipos de desarrollo y empresas que desarrollan software van a necesitar modernizarse tarde o temprano con el fin de entregar valor más rápido a sus clientes. Una cuestión que se planteará en este proceso será adoptar metodologías ágiles. Y con esta decisión aparecerán nuevas necesidades de organización y revisión del proceso de desarrollo software. En muchos casos les obligarán a dar un giro radical a lo que están acostumbrados a hacer y necesitarán herramientas similares a las que hemos comentado. Elegir la mejor herramienta que facilite esa modernización será una de las claves de éxito para conseguir el objetivo.