Desarrollo de software en la nube: ¿tienes lo que hay que tener?
Mrityunjay Kumar, vicepresidente de Productos de Zenoti, analiza qué se necesita para crear un software en la nube… El software en la nube es la nueva norma en tecnología empresarial. Proveedores de alojamiento como Amazon, Microsoft y Google han facilitado más que nunca el desarrollo y la implementación de software en la nube. Si a esto le sumamos que el alojamiento resulta rentable, no es de extrañar que todo el desarrollo de software […]

Mrityunjay Kumar, vicepresidente de Productos de Zenoti , analiza qué se necesita para desarrollar un software en la nube…
El software en la nube es la nueva norma en el ámbito de la tecnología empresarial. Proveedores de alojamiento como Amazon, Microsoft y Google han facilitado más que nunca el desarrollo y la implementación de software en la nube. Si a esto le sumamos que el alojamiento resulta rentable, no es de extrañar que todo el desarrollo de software se esté trasladando rápidamente a la nube.
Esta tendencia me recuerda a los primeros tiempos de Visual Basic en la década de los noventa. Visual Basic facilitó y democratizó el desarrollo de software de escritorio gracias a su entorno de desarrollo integrado (IDE) y su paradigma de programación, ambos muy fáciles de usar. En efecto, Visual Basic redujo el nivel de conocimientos necesarios para convertirse en programador principiante. Sin embargo, lo que no hizo fue convertir a nadie en un buen programador, y no era fácil distinguir a un buen programador de uno mediocre. He observado una tendencia similar en la programación para Android. El IDE ha facilitado tanto convertirse en un desarrollador de Android mediocre tan rápidamente que ha resultado difícil encontrar a un desarrollador que sea realmente bueno.
El software en la nube parece seguir una trayectoria similar. La facilidad con la que se pueden crear e implementar soluciones en la nube ha hecho que muchos desarrolladores se autodenominen «desarrolladores en la nube». Resulta difícil distinguir a un buen desarrollador en la nube de uno mediocre. Esto complica enormemente la contratación de buenos desarrolladores capaces de diseñar para la nube.
Como cualquier nuevo paradigma, la nube conlleva sus propias limitaciones y retos, y un buen desarrollador en la nube necesita la experiencia necesaria para anticiparse a ellos y diseñar soluciones que los superen. En este artículo, me gustaría compartir lo que mis años de experiencia en el desarrollo y la implementación de soluciones en la nube me han enseñado sobre la creación de software en la nube a gran escala. He llegado a la conclusión de que el desarrollo en la nube requiere un cierto tipo de ADN que es difícil de encontrar en los desarrolladores de software tradicionales, pero es posible que los desarrolladores desaprendan su «enfoque no orientado a la nube» y vuelvan a aprender a desarrollar para la nube. En caso de que no consigas encontrar a los empleados adecuados, también puedes contratar a un proveedor de servicios de externalización de TI que te ayude a crear la herramienta adecuada en la plataforma adecuada.
Antes de continuar, definamos qué entiendo por «software en la nube».
¿Qué es el software en la nube?
Hay dos formas de enfocar las aplicaciones en la nube:
- Aplicaciones diseñadas de forma independiente de la nube y que utilizan esta únicamente para su implementación.
- Aplicaciones diseñadas para la nube y que utilizan la nube como plataforma de desarrollo
En Zenoti, nos referimos a lo segundo: un software diseñado para la nube con el fin de aprovechar sus capacidades y sortear sus limitaciones. Nos referimos a una arquitectura multitenant que da soporte a todos los clientes a través de una única base de código y una única versión de software. Aprovechar la nube para la implementación es una ventaja importante; sin embargo, no es suficiente.
Tradicionalmente, las empresas de software creaban versiones personalizadas de su software para los clientes y las implementaban en la nube. En este contexto, no consideramos que esto constituya una verdadera nube empresarial, ya que simplemente se trata de trasladar un sistema local a un entorno en la nube, en lugar de aprovechar las capacidades propias de la nube.
Para crear un sistema escalable y de misión crítica en la nube, un desarrollador debe utilizar la nube como plataforma y diseñar teniendo en cuenta sus características. No basta con abordarlo como si se tratara de un software de aplicación tradicional.
¿En qué se diferencia el desarrollo en la nube del desarrollo tradicional?
Hay tres formas de enfocar el desarrollo que ponen de relieve las diferencias fundamentales entre el desarrollo en la nube y el desarrollo tradicional.
Arquitectura del producto
Diseño orientado a la elasticidad de los recursos: los recursos en la nube son elásticos, puedes disponer de tantos como necesites, durante el tiempo específico que los necesites. Un buen software en la nube debe estar diseñado para escalar horizontalmente —iniciar nuevas instancias del software bajo demanda para gestionar mejor la carga—, ya que esto es en lo que destaca la nube. El software tradicional está diseñado para escalar verticalmente —añadir más potencia de procesamiento, memoria y almacenamiento a un conjunto existente de máquinas para gestionar mejor la carga—. Este tipo de aplicaciones no pueden escalar bien en la nube.
Para aprovechar la elasticidad, un buen software de gestión de salones de belleza debe estar compuesto por componentes sin estado y con un acoplamiento flexible. Además, estos deben poder implementarse y actualizarse de forma independiente. Esto permite iniciar tantas instancias de un componente como sea necesario en varias máquinas virtuales cuando el sistema se enfrenta a una carga elevada. De este modo, se garantiza que el sistema pueda soportar una carga elevada en temporada alta (como en Navidad) sin necesidad de implementar recursos costosos a lo largo del año.
Diseño para la multitenencia: un software en la nube debe integrar la multitenencia en su arquitectura, de modo que se garantice que no haya absolutamente ninguna posibilidad de que los datos de un cliente sean accesibles para otro. No puede confiar en que los desarrolladores actúen correctamente. Además, las técnicas de partición deben planificarse en la fase de diseño, de modo que los requisitos de datos y recursos de un cliente no afecten a los de otro.
Operaciones de software
Seguridad, disponibilidad y fiabilidad: dado que una nube pública es accesible para todo el mundo, garantizar la seguridad requiere el máximo cuidado y debe integrarse en la arquitectura del sistema. Por ejemplo, un marco de desarrollo de API debe incorporar un modelo de control de acceso y de permisos por roles.
Dado que una aplicación en la nube agrupa a todos sus usuarios en un único código base y una única versión, los requisitos de fiabilidad y disponibilidad del sistema son muy elevados. Cualquier pequeño deterioro del servicio lo sufren todos los usuarios de la aplicación, lo que significa que el efecto negativo se multiplica. La tolerancia a fallos y la capacidad de recuperación deben estar integradas en el sistema. La infraestructura en la nube también puede fallar, por lo que una buena solución en la nube debe estar diseñada para ofrecer redundancia y recuperación ante desastres a gran escala.
Supervisión: no basta con desarrollar software; la supervisión en tiempo real de la aplicación en la nube se convierte en un elemento clave del software. El sistema debe incorporar la supervisión y un sistema de alertas en su diseño. El equipo de ingeniería debe tener en cuenta las operaciones en general y la supervisión del estado del sistema en particular durante el desarrollo; de lo contrario, las operaciones pueden resultar costosas y propensas a errores. Para crear un buen software en la nube, es necesario desarrollar (o integrar) un amplio conjunto de herramientas para el registro y el análisis de errores, así como para la supervisión del rendimiento de las API y del sistema.
Más información sobre: software de gestión de citas para salones de belleza
Cultura de la ingeniería
Agilidad con cuidado: el equipo de desarrollo y los procesos deben ser ágiles, ya que, cuando el software da servicio a miles de clientes a partir de una única copia del código, cualquier problema puede multiplicarse rápidamente por mil. Los defectos, las escalaciones y las solicitudes de mejora exigen la capacidad de responder con rapidez. Las implementaciones deben realizarse de forma regular y fiable, en semanas en lugar de meses. Sin embargo, no hay posibilidad de que una aplicación en la nube escape al lema de «una única versión para todos los clientes». Por lo tanto, todo el diseño de funcionalidades y las correcciones de defectos deben tener en cuenta a todos los clientes. A veces, esto puede significar imponer un cambio a un cliente que, por lo demás, está satisfecho, ya que, aunque el cambio en un flujo de trabajo sea necesario solo para unos pocos clientes, afectará a todos los clientes. Los gestores de producto y los jefes de ingeniería deben ser muy meticulosos en su diseño, sin perder agilidad.
Decisiones basadas en datos: un buen software en la nube recopila datos sobre cada interacción que el usuario tiene con el software. Una sólida cultura de ingeniería aprovecha estos datos para tomar todas las decisiones de ingeniería. Esta es la única forma de garantizar que los cambios que afectan a la compatibilidad se puedan introducir de forma segura, que se puedan eliminar las funciones que no se utilizan para evitar un mayor desperdicio, que se pueda identificar una función con problemas de usabilidad antes de que el cliente se queje de ella y, en general, de tomar buenas decisiones sobre el producto.
Las viejas costumbres nunca mueren
Si eres un desarrollador acostumbrado al desarrollo de software tradicional y quieres convertirte en un buen desarrollador en la nube, prepárate para desaprender y volver a aprender algunas cosas. Tienes que familiarizarte con las capacidades que ofrecen las plataformas en la nube, con la arquitectura en la nube que ha demostrado su escalabilidad en grandes empresas B2C y B2B, y dejar de pensar en sistemas locales que escalan verticalmente. También debes empezar a considerar la implementación y la supervisión como parte de tu perfil profesional, e inculcar la cultura de la «agilidad con cuidado» y la toma de decisiones basadas en datos. Basándome en mi experiencia trabajando con excelentes desarrolladores en la nube y contratando a muchos de ellos, puedo decirte que es difícil deshacerse de algunos malos hábitos, pero volver a aprender es muy gratificante y merece la pena el esfuerzo. Es difícil cambiar el ADN, pero no es imposible.
Lo que se aplica a los desarrolladores, se aplica también a las empresas tecnológicas. Las organizaciones que logran desarrollar una competencia en software en la nube son aquellas que llevan el software en la nube en su ADN; contratan a equipos con un ADN similar y siguen ayudando a las personas a desaprender y volver a aprender a medida que se incorporan nuevos empleados.
¿Tienes el ADN de la nube?

Escrito por
Emily Martin, redactora publicitaria de Zenoti
Una devota lectora confesa a la que le apasionan los idiomas y tejer historias con palabras. Se siente más feliz cuando se sumerge en la naturaleza, ya sea a caballo o esquiando, o acurrucada con una buena novela de suspense. Los artículos de Emily se centran en compartir tendencias y perspectivas que influyen en el sector de la belleza y el bienestar.






