Entornos de desarrollo remotos
La tendencia de la industria llamada a cambiar nuestra forma de trabajar.
En este artículo quiero hablaros de una de las tendencias en la industria de producción de software más interesantes y que tiene el potencial para causar un mayor impacto en la forma en que llevamos a cabo nuestra actividad cotidiana, no es otra cosa que los entornos de desarrollo remotos.
En consonancia con lo que hemos visto últimamente en otras áreas de esta industria, pero también en otros mercados como, por ejemplo, el de la música, el cine, los libros o los videojuegos, cada vez adquiere más fuerza la creencia de que es mejor pagar por lo que usamos que tener recursos en propiedad que puede que luego no usemos tanto como pensábamos. Y es de esa forma como el modelo de suscripciones se ha asentado en nuestras vidas. Es cómodo y práctico para nosotros, pero también para las empresas, que ven en este modelo la oportunidad de obtener unos ingresos recurrentes y previsibles.
En la industria del software, la nube ha reemplazado en gran medida a los centros de datos tradicionales, que se han visto desbancados por los entornos gestionados y altamente escalables que ofrecen los principales proveedores y en los que, desde hace tiempo, confían la mayoría de negocios. Así, a pesar de la existencia de voces críticas en el sector que abogan por la elección de la infraestructura más adecuada a cada caso de uso, el IaaS se ha convertido en el modelo de aprovisionamiento de infraestructura universal. Esto se debe en parte también al esfuerzo que conlleva migrar desde un centro de datos privado a la nube cuando este ya no es capaz de dar servicio a un volumen creciente de usuarios y resulta muy complicado actualizarlo y mantenerlo.
También los desarrolladores nos hemos beneficiado de la nube y nuestros proyectos tienen acceso gratuito a servicios de integración y entrega continuas (CI/CD), cobertura de código, funciones web, hospedaje, etc. siempre limitados a una cuota pero con la posibilidad de suscribirnos para acceder a más recursos.
El desarrollo en entornos remotos no es una novedad de esta década y ya en la década pasada surgieron distintas iniciativas que nos permitían conectarnos a una máquina remota con un entorno de desarrollo preparado para poder trabajar. Hablo de proyectos como Cloud9 o Codeanywhere, algunos de ellos cancelados o relegados a un segundo plano.
La principal diferencia entre los entornos de desarrollo que han surgido recientemente y los anteriores, es la posibilidad de controlar los recursos asignados al entorno. Así, servicios como Codespaces de GitHub o JetBrain Space permiten contratar máquinas aprovisionadas con distintas elecciones de recursos: más potentes o más baratas, según nuestras necesidades; por el período de tiempo deseado.
También ha cambiado el modo de acceso, mientras en el pasado empleábamos principalmente el navegador, actualmente nos conectamos al entorno remoto mediante nuestro IDE habitual (el acceso por navegador sigue siendo una opción en algunos casos), que ejerce el papel de cliente ligero. Así, todas las funciones relacionadas con la visualización y la interacción con el usuario se ejecutan localmente, manteniendo la percepción de reactividad, y las funciones pesadas como el procesado del código, la compilación o la depuración, se ejecutan en el proceso remoto. Podríamos pensar en un beneficio similar al que aporta utilizar una aplicación móvil nativa frente a su contrapartida web.
Así podemos seguir trabajando en un entorno que nos resulta familiar pero con las ventajas que presentan los entornos de desarrollo remotos de nueva generación:
- El cliente requiere pocos recursos, por lo que no necesitamos invertir recurrentemente en equipos caros de altas prestaciones.
- Esto es bueno también para nuestra empresa, que invierte en recursos bajo demanda, que los desarrolladores compartimos, y solo paga por lo que necesita en cada momento.
- Además, facilita poder trabajar desde cualquier sitio, ya que nos podemos conectar al entorno desde otra máquina o desde un equipo más barato que no nos dé tanta pena llevarnos de viaje.
- Estos entornos de desarrollo son desechables y podemos levantar uno para trabajar en un proyecto con unas determinadas herramientas que no queremos instalar en nuestra máquina y destruirlo cuando hayamos terminado, sin que quede basura en el equipo.
Otra de las características interesantes de estos entornos es su reproducibilidad. En sintonía con los avances en materia de DevOps, la mayoría de proveedores permiten reproducir el entorno (sistema operativo, herramientas, configuración) a partir de manifiestos y otros ficheros de configuración que se almacenan junto al código en el sistema de control de versiones. Esto añade una serie de ventajas como son:
- La posibilidad de trabajar con sistemas operativos y herramientas concretos o versiones concretas de estos. Lo que permite, por ejemplo, preservar un entorno para trabajar contra una versión concreta de Android que queremos seguir soportando.
- O incorporar rápidamente colaboradores a un proyecto, ya que estos no necesitarán configurar nada en su máquina, basta con que levanten el entorno de desarrollo remoto. Con el valor añadido de que, al vincular la configuración al proyecto, resultará más sencillo conseguir que el código producido por cada una de las partes sea homogéneo y respete las mismas convenciones.
Todas estas ventajas pueden lograrse también utilizando máquinas virtuales. Sin embargo, del mismo modo que los contenedores se han impuesto a las máquinas virtuales por ofrecer prestaciones similares de forma más dinámica y a cambio de menos recursos, parece probable que los entornos de desarrollo remotos reemplacen a las máquinas virtuales en este cometido. De hecho, algunas herramientas permiten implementar entornos de desarrollo remotos mediante una estrategia basada en contenedores gestionados de forma privada.
Las compañías detrás de los IDE más populares están haciendo un importante esfuerzo por proporcionar soluciones para el desarrollo remoto. Ahora solo nos queda por ver si estas iniciativas cuajarán realmente, cambiando el statu quo en el que los desarrolladores necesitamos equipos caros e inviertimos tiempo y esfuerzo en configurar nuestros entornos de desarrollo o si, por el contrario, serán abandonadas como ha ocurrido, por ejemplo, con Stadia y otros proyectos prometedores que estaban llamados a revolucionar el ecosistema de Internet.