Plataforma interna para desarrolladores, IDP

Seguramente hayamos oído muchas veces hablar del Customer experience (CX) o del user experience (UX). Para aquellos que no lo hayan hecho, ambos son términos muy extendidos sobre la experiencia que vive una persona. CX se refiere a la experiencia general que un cliente tiene con una marca u organización, incluyendo todos los puntos de contacto a lo largo de su viaje como cliente, mientras que UX se refiere específicamente a la experiencia que un usuario tiene al interactuar con un producto o servicio digital, como un sitio web o una aplicación. Dicho de otra manera, CX es un concepto más amplio que abarca toda la experiencia del cliente, mientras que UX se enfoca en la experiencia del usuario con un producto o servicio digital en particular.

Pero, ¿quién se encarga de crear estos productos o servicios digitales? Los desarrolladores, mediante sus diseños e implementaciones, hacen que las soluciones finales ofrezcan esa experiencia única al usuario. ¿Y quién se encarga de ofrecer una experiencia única a los desarrolladores? Hablaríamos entonces de developer experience (DevX o DX). Para ser capaces de ofrecer una buena experiencia a los desarrolladores, debemos (como en los casos anteriores), fijarnos en su viaje (su journey); fijarnos en los pasos y acciones que realizan desde que se idea una solución, hasta que se encuentra funcionando en producción.

¿No sería deseable que los desarrolladores se centraran en crear la solución buscada sin tener que preocuparse de configurar todos los detalles del despliegue o sin necesitar conocer al detalle todas las tecnologías implicadas en su desarrollo?

Aquí es donde entran en juego las plataformas internas de desarrolladores (Internal Developer Platform, IDP).

¿Qué es una IDP y quién la gestiona?

Existen muchos tipos distintos de plataformas, pero en este caso como su nombre indica, va dirigida a los programadores. El equipo de plataforma es el encargado de construir la plataforma interna de desarrolladores (IDP) con el fin de crear rutas doradas y permitir el autoservicio de los desarrolladores. Una IDP se compone de muchas tecnologías y herramientas diferentes, unidas de forma que se reduce la carga cognitiva de los desarrolladores sin abstraer el contexto y las tecnologías subyacentes. Siguiendo las mejores prácticas, los equipos de plataforma tratan su plataforma como un producto y la construyen, la mantienen y la mejoran continuamente con el feedback obtenido de sus usuarios.

Cabe destacar de la definición el concepto de «equipo de plataforma», que es una agrupación de otros tipos de equipos que proporcionan un producto interno (la plataforma) para acelerar la entrega por parte de los equipos alineados con el flujo de valor. Es decir, para el uso óptimo de la plataforma, es más que recomendado adaptar el modo de trabajo, con equipos focalizados en distintas tareas (recomiendo la lectura de Team Topologies). Pero no vamos a centrarnos en la parte organizacional.

Enfoque Team Topologies

Kaspar von Grünberg, CEO de Humanitec define IDP como “una capa de autoservicio que permite a los desarrolladores interactuar de forma independiente con la configuración de entrega de su organización, permitiéndoles autoservirse de entornos, despliegues, bases de datos, registros y cualquier otra cosa que necesiten para ejecutar sus aplicaciones.”

Podemos ver a la plataforma interna para desarrolladores (IDP) como una colección de tecnologías y herramientas utilizadas por los desarrolladores debidamente ligadas, para minimizar la carga cognitiva, agilizar el proceso y mejorar la experiencia del desarrollador. Las IDP son muy variadas y abarcan funcionalidades como control de versiones, pipelines de integración y despliegue continuo (CI/CD), orquestación de contenedores, aprovisionamiento de infraestructura, pruebas automatizadas y observabilidad, entre otras. Del mismo modo, esta colección de tecnologías y herramientas, puede ser de propia generación, de software libre o propietaria. Dentro de este último tipo podemos nombrar Qovery, OpsLevel, Humanitec, Argonaut, Gopaddle, o Portainer aunque existen muchas más.

Las IDP suelen cubrir 5 grandes funciones:

Gestión de la configuración de aplicaciones: para permitir gestionar la configuración de la aplicación como código de una forma estandarizada, fiable, dinámica y escalable. Esto tiene un impacto significativo en el mantenimiento, depuración y gobierno de la configuración de las aplicaciones.

Orquestación de infraestructuras: IDP es la suma de la tecnología y las herramientas que un equipo de Ops, DevOps o de ingeniería de plataformas une para construir caminos dorados para los desarrolladores. Todas las herramientas e infraestructuras existentes forman parte de la IDP, se integran con ella y son orquestadas por la IDP para permitir procesos de Entrega Continua o incluso de Despliegue Continuo (CD).

Gestión de entornos: para permitir a los desarrolladores autogestionar entornos totalmente aprovisionados bajo demanda. Esto elimina muchos cuellos de botella y permite una entrega más rápida. Cada nuevo entorno se aprovisiona según lo definido por el equipo de la plataforma.

Gestión de despliegues: para permitir a los equipos pasar a un proceso de despliegue continuo (CD). También proporciona un registro claro de cada despliegue realizado, lo que resulta muy útil para auditorías y procesos similares.

Control de acceso basado en roles: para gestionar el acceso a nivel granular. Esto puede limitar el acceso a la producción a un pequeño número de personas de confianza, al tiempo que permite a cada ingeniero crear nuevos entornos de desarrollo según sea necesario.

Con el fin de facilitar el uso de las IDP, y dependiendo de la madurez de las plataformas, nos podemos encontrar con diversas maneras de acceder a las funcionalidades ofrecidas por ellas, por ejemplo desde línea de comando, mediante interfaz gráfica o incluso mediante portales.

Mención especial son los portales, conocidos como Internal Developer Portal (¡oh no!, otro IDP, pero nosotros lo usaremos solo para referirnos a las plataformas).
Gartner los define como:

“Los portales internos para desarrolladores sirven de interfaz a través de la cual los desarrolladores pueden descubrir y acceder a las funciones de la plataforma interna para desarrolladores.”
Gartner

Muchas plataformas internas para desarrolladores ofrecen también portales para su uso, con lo que en ocasiones la línea entre los portales y las plataformas se diluye.

Beneficios de las plataformas internas para desarrolladores

Estas plataformas ofrecen múltiples beneficios clave no solo para los programadores, sino para el total de la organización.

Estandarización y automatización

Proporcionan un conjunto estandarizado de herramientas y servicios de autoservicio para los desarrolladores, reduciendo la fragmentación y la complejidad.

Pueden automatizar muchas tareas manuales asociadas con el desarrollo y las operaciones, como la configuración de entornos, la implementación de código y la gestión de la infraestructura.

Automatizan tareas recurrentes como la configuración de entornos de desarrollo, la construcción de pipelines y el despliegue de aplicaciones, permitiendo a los desarrolladores centrarse más en escribir código.

Ayudan a estandarizar los procesos de desarrollo y operaciones en toda la organización. Esto conduce a mejorar la coherencia y la calidad del código.

Colaboración e integración

Al ofrecer estandarización, facilitan la colaboración entre equipos y la facilidad de integración entre ellos.

Fomentan la colaboración entre equipos de desarrollo, operaciones y seguridad al proporcionar una plataforma compartida.

Aceleran la incorporación de nuevos desarrolladores al proporcionar recursos, documentación y mejores prácticas en un solo lugar.

Permiten que nuevos equipos se integren rápidamente con las mismas herramientas y servicios.

Eficiencia y escalabilidad

Permiten a los desarrolladores centrarse en escribir código en lugar de gestionar la infraestructura. Esto acelera el tiempo de desarrollo y permite a los equipos entregar productos más rápidamente.

Gracias a la estandarización y capacidad de colaboración, facilitan la escalabilidad permitiendo a los equipos de desarrollo implementar y gestionar aplicaciones a gran escala con menos esfuerzo.

Gobernanza y cumplimiento

Establecen un marco de gobierno que permite flexibilidad y adherencia a las mejores prácticas, cumpliendo con los requisitos de seguridad y cumplimiento.

Al estandarizar y automatizar los procesos de desarrollo y operaciones, podemos incluir pasos de control para la seguridad y el cumplimiento, mejorando la seguridad del código y la infraestructura final.

Peligros de las plataformas

No todo son ventajas en el uso de las IDP. En el libro Platform Strategy, Gregor Hohpe detalla varias de las consecuencias no deseadas que podemos encontrarnos por el uso de estas plataformas.

Por ejemplo, al introducir una capa de abstracción entre el programador y las diferentes herramientas, el programador aprende a usar esta capa de abstracción y no las herramientas en sí. El programador encontrará menos atractivo el trabajo, porque no crecerá en conocimiento de las herramientas y le será más difícil encontrar trabajo en el futuro, ya que solo conocerá cómo usar esta herramienta interna.

Otro de los peligros que se comenta en el libro, es que las herramientas irán evolucionando, y la IDP debe hacerlo con ellas para poder ofrecer estas nuevas funcionalidades. Antes este escenario hay dos opciones posibles, que se mantenga y actualice la plataforma, lo que implica una inversión y equipos dedicados a ello. Si por el contrario, no se actualiza, perderemos las nuevas funcionalidades de las herramientas y los programadores acabarán dejando de usar la plataforma.

Pero aunque no sean para todos perfectas, las IDP no sólo facilitan un mejor DevX, sino que están cambiando la forma de pensar sobre el desarrollo y la implantación del software. Por otro lado, los portales funcionan como un punto de entrada centralizado que ofrece a los desarrolladores funciones de autoservicio, un catálogo de software completo e información basada en datos para mejorar la calidad y la fiabilidad del software. Con todo ello, los desarrolladores pueden centrarse en la innovación y el desarrollo de software de alta calidad, a la vez que garantizan el cumplimiento de las políticas y requisitos de la organización.

En otras palabras, mejoran la experiencia de desarrollo.