Claves para la transición del software a la nube

7 CLAVES PARA LA TRANSICIÓN DEL SOFTWARE A LA NUBE

La utilización de aplicaciones en la nube está creciendo a pasos agigantados, y más temprano que tarde, nuestros clientes nos pedirán soluciones en la nube que les permitan acceder a las ventajas que les ofrecen sin por supuesto perder los beneficios de las aplicaciones tradicionales.

Sin querer ser pretencioso con el alcance de este artículo, me gustaría proporcionar al lector alguna guía, basada en mi experiencia, de aquellos factores a considerar si se tiene en mente un escenario de migración de aplicaciones tradicionales de escritorios a aplicaciones 100% en la nube comercializadas en modo SaaS (“Software as a Service”). Por tanto, me refiero a aplicaciones web, y descarto en este escenario a las siguientes que por supuesto también podrían ser comercializadas como SaaS:

  • Aplicaciones tradicionales alojadas en DataCenter y acceso remoto o mediante streaming.
  • Aplicaciones híbridas, de acceso remoto a datos, pero de instalación local.

Según mi experiencia, el primer factor a tener en cuenta según mi experiencia es el modelo de negocio.

1 El modelo de negocio en la nube

Es muy importante partir con mentalidad de startup y por tanto replantearnos el negocio desde el principio, puesto que los paradigmas utilizados hasta el momento no sirven:

  • ¿ Canales de Distribución ?
  • ¿ Precio ?
  • ¿ Competencia ?
  • ¿ Mercado Global o no ? ¿ Nos vamos a especializar ?
  • ¿ Qué vamos a aportar de valor diferente?

Una herramienta que ayuda a elaborar nuestro modelo de negocio es el Business Model Canvas (“Lienzo de Modelo de Negocio”). En particular, la recomendación para startups es la versión de Lean Canvas de Eric Ries. En esta versión, como se ve en la imagen adjunta, el lado derecho representa el Mercado, y el izquierdo el Producto, que representa una unidad de trabajo más real para este tipo de negocios.

Lean Canvas de Eric Ries en español

Un punto a tener en cuenta, casi de forma independiente, en el mundo SaaS es el Precio. Estamos hablando de cuotas mensuales recurrentes, normalmente muy bajas, donde es crucial llegar a una cantidad de suscripciones considerables. Lo debemos tener en mente constantemente, porque los ingresos se van a periodificar en el tiempo, obteniendo a medio y largo plazo unos ingresos importantes, siempre y cuando consigamos “retener” a nuestros clientes. Y de aquí se deriva, otro factor de peso a tener en cuenta: búsqueda activa y constante de medidas que nos permitan tener fidelizados a los usuarios de nuestras aplicaciones.

2 Arquitectura y tecnología de desarrollo

Si es importante plantear una adecuada arquitectura en cualquier tipo de aplicación, todavía lo es más para las aplicaciones en la nube. En este caso resulta totalmente imprescindible diseñar una arquitectura flexible, desacoplada y fácilmente escalable.

Una arquitectura de cuatro capas como la que a continuación se expone cumple con dichos objetivos:

  • Capa de Presentación. Interfaz de usuario y solicitud de servicios. Por su importancia se explica en más detalle a continuación.
  • Capa de Servicios. Gestiona peticiones de la Capa de Presentación hacia la Capa de Negocio y devuelve resultados. Se puede implementar a través de Servicios Web.
  • Capa de Negocio. Lógica de negocio de la aplicación. Atiende peticiones desde la capa de servicios.
  • Capa de Acceso a Datos. Lógica de acceso a los datos, persistencia. Es recomendable que esté preparada para acceder a múltiples gestores de Bases de Datos.

Capa de Acceso a Datos

La interfaz de usuario debe estar muy orientada a la eficiencia y ofrecer al usuario una experiencia similar a las aplicaciones de escritorio. En este sentido, están cobrando especial importancia en la actualidad el desarrollo de las “Single Page Applications”, que permiten diseñar interfaces muy fluidas que mejora considerablemente la experiencia de usuario. Existen varios frameworks de desarrollo, todos ellos basados en javascript y de código abierto, que podemos utilizar para el desarrollo de esta técnica. Es el caso de AngularJS, DurandalJS, o Ember.js

Y apoyando a las “Single Page Applications” utilicemos el patrón de diseño “Modelo-Vista-VistaModelo” (MVVM). En este patrón de diseño se separan los datos de la aplicación, de la interfaz de usuario pero a diferencia del patrón “Modelo-Vista-Controlador” (MVC), no necesitamos controlar manualmente los cambios en la vista o en los datos, puesto que éstos se actualizan directamente cuando sucede un cambio en alguno de ellos.

Modelo MVC y MVVM

3 Metodología de desarrollo

Las metodologías ágiles, y en concreto scrum, proporcionan el marco de trabajo ideal para el desarrollo de las aplicaciones en la nube.

A continuación se da un vistazo rápido a algunas de sus características:

  • Scrum es un proceso ágil que nos permite centrarnos en ofrecer el más alto valor de negocio en el menor tiempo.
  • Nos permite rápidamente y en repetidas ocasiones inspeccionar software real de trabajo. Por ejemplo, en ciclos de cada dos semanas o un mes.
  • El negocio fija las prioridades. Los equipos se auto-organizan a fin de determinar la mejor manera de entregar las funcionalidades de más alta prioridad.
  • Cada dos semanas o un mes, cualquiera puede ver el software real funcionando y decidir si liberarlo o seguir mejorándolo en otro sprint

Sprint en desarrollo scrum

4 Herramientas de desarrollo

Necesitamos las herramientas adecuadas que permitan dar soporte a todo lo mencionado en los puntos anteriores.

De modo general, y sin llegar a concretar en productos comerciales puesto que no es el propósito de este artículo, estamos hablando de:

  • Herramientas colaborativas de trabajo que nos permitan aplicar una metodología ágil de desarrollo con una vinculación lo más alta posible con el desarrollo del software. Me estoy refiriendo principalmente a:
    1. Gestión y resolución de incidencias y nuevas funcionalidades.
    2. Versionado de código.
    3. Gestión de proyectos, pero con clara orientación a metodologías ágiles.

Todas ellas vinculadas entre sí y que permitan una perfecta trazabilidad desde el propio código fuente de nuestra aplicación.

  • Herramientas para aseguramiento de la Calidad:
    1. Testeo unitario, como por ejemplo JUnit.
    2. Servidores de integración continua. Es el caso, por ejemplo, de Jenkins con licencia open source.
    3. Automatización de testeo de la interfaz de usuario.

En nuestro caso, llevamos bastante tiempo colaborando con la Universidad Politécnica de Valencia en una herramienta desarrollada por ellos llamada Testar (http://www.pros.upv.es/es/testar). Testar proporciona un framework de testeo para el testeo automatizado de la interfaz de usuario.

5 Infraestructura DataCenter

Seguramente no sea necesario puntualizar hasta qué punto es importante este factor, cuando de lo que se está hablando ciertamente es de la “nube”, se trata de un factor crítico.

Nos debemos centrar en:

  • Aumentar o disminuir los recursos de forma rápida, en cuestión de minutos.
  • Posibilidad de elegir entre varios tipos de instancia, sistemas operativos y paquetes de software adecuado a nuestras necesidades.
  • Ofrecer tranquilidad a los usuarios de la plataforma de que sus datos son totalmente confidenciales, y que se respetan las condiciones exigidas por la Ley de Protección de Dato (privacidad de los datos). Y evitar intrusiones a sistemas que no deban ser accesibles de forma externa.
  • Alta Disponibilidad / Fiabilidad. Permitir montar infraestructuras totalmente redundadas, de alta disponibilidad antes caídas.
  • No sólo IaaS (Infrastucture as a Service), sino también PaaS (Platform as a Service). Dentro de nuestro ecosistema de computación en la nube el PaaS está diseñado para soportar el desarrollo, ejecución y mantenimiento rápido de nuestras aplicaciones, abstrayéndonos de la infraestructura.

Se trata de cuestiones importantes como:

  • SQL Server como servicio.
  • Servicios de Mensajería y Notificaciones.
  • Sistema de almacenamiento.
  • Permitir una infraestructura Multi-Tenant.

Opciones asequibles y que cubren nuestras necesidades tenemos:

  • Infortelecom
  • Amazon EC2
  • Microsoft Azure
  • Google Cloud Platform

6 Alianzas y Estrategias con otras Apps existentes

Es importante no “reinventar” la rueda. Hay productos en el mercado muy buenos. Debemos dedicar nuestros esfuerzos a desarrollar aquello que es el “core” de nuestro negocio y luego trabajemos para integrarlo con esos productos ya existentes, a los que jamás llegaremos porque no somos especialistas. Al final, se trata de buscar las mejores alianzas posibles para fidelizar al máximo a nuestros clientes, ofreciéndole soluciones más allá de la propia tecnología.

Me refiero, por ejemplo a:

  • Comercio Electrónico.
  • Preventa/Autoventa en Movilidad.
  • Business Intelligence.
  • CRM
  • etc.

7 Equipo y formación

Aunque sea el último de los factores a mencionar, y tal vez por ello parezca menos importante, es justo todo lo contrario.

He hablado de tecnología, metodología, infraestructura, pero sobre todos ellos están las personas. Sin ellas, sin su compromiso, motivación y conocimiento, imposible el desarrollo de un proyecto de esta envergadura.

Y bajo mi punto de vista debemos trabajar los siguientes puntos:

  • Plan de Formación a medio plazo para preparar a nuestro equipo actual (o parte de él). El cambio en la tecnología es radical.
  • Aislar al equipo para trabajar en el nuevo proyecto. Procuremos evitar interferencias del día a día. En este sentido, practicar el tele-trabajo siempre que se pueda, y aunque sea sólo ciertos días a la semana, ayuda a este propósito.
  • Nuevas incorporaciones que proporcionen “aire fresco” al proyecto. Nuevos conocimientos y nuevas formas de pensar serán el catalizador definitivo para propulsar el proyecto.

Y para cerrar este artículo, la conclusión final es que debemos replantearlo todo. La experiencia en el mundo de la tecnología es buena, pero no suficiente para el futuro que nos espera, y que ya está ahí, a la vuelta de la esquina.