“12 Factor App”: aplicaciones exitosas SaaS

DESARROLLO WEB, CLOUD NATIVE.
Group 2

El desarrollo de aplicaciones web (Web Apps) enfrenta retos de ingeniería de software que son comunes y se pueden enmarcar en diferentes factores. The 12 Factor App es una metodología utilizada para responder a estos desafíos y construir aplicaciones de alta calidad.

Comprometidos con las mejores prácticas para el desarrollo de aplicaciones distribuidas y "microservicios" consideramos valioso conocer sobre la metodología Twelve-Factor para construir aplicaciones de software como servicio. El documento original se publica en 12factor.net.

Presentamos un resumen de estas prácticas de desarrollo que buscan evitar algunos problemas sistémicos que hemos observado en el desarrollo de aplicaciones modernas, aportar un vocabulario común que sirva para discutir sobre estos problemas, y ofrecer un conjunto de soluciones conceptualmente robustas para esos problemas acompañados de su correspondiente terminología. El formato está inspirado en los libros de Martin Fowler “Patterns of Enterprise Application Architecture y Refactoring”.

Origenes de 12 Factor App

La metodología de doce factores (12 Factor) fue creada en el año 2012 por varios desarrolladores de aplicaciones en Heroku y consiste en un enfoque o filosofía de trabajo en la que se deben considerar doce principios para desarrollar aplicaciones en la nube (Cloud Computing Apps). A través de estos 12 puntos clave se facilita la construcción correcta y el desarrollo óptimo de un servicio en la nube.

12 Factor - Metodología para desarrollo SaaS

12 Factor es principalmente un marco para construir aplicaciones de software como servicio – SaaS (Software as a Service) – en la nube. Para entender su enfoque y su aplicación es necesario conocer los tipos de soluciones cloud computing como IaaS, PaaS, SaaS.

¿Dónde encaja el desarrollo SaaS?

Cloud computing ofrece servicios que pueden ser divididos en 3 niveles:

  • Infrastructure as a Service (IaaS) - Infraestructura como servicio

Ofrece el acceso a infraestructura (servidores, redes, almacenamiento, balanceadores de carga, etc) con total control para el usuario. En este servicio están incluídos adicionalmente el almacenamiento y los firewalls.

Algunos ejemplos de IaaS son los servicios base de Amazon Web Services y Microsoft Azure.

  • Platform as a Service (PaaS) - Plataforma como servicio

Usando una plataforma administrada, podemos ejecutar aplicaciones bajo un entorno de infraestructura administrado. Significa que el usuario aprovecha entornos de ejecución proporcionados por un proveedor, sin tener control específico de la infraestructura subyacente. Algunos ejemplos de PaaS son OpenShift, Google App Engine, Heroku.

  • Software as a Service (SaaS) - Software como servicio

Es el escenario de mayor abstracción para el usuario. Se entrega un software completamente funcional, delegando la administración de plataforma e infraestructura a un proveedor.

El usuario adquiere el uso de una aplicación bajo demanda y no necesita realizar la instalación ni el mantenimiento.Algunos ejemplos de SaaS son Facebook, Gmail, Google Drive y Flickr.   

Las aplicaciones SaaS son en sí una industria con un gran potencial y los retos de desarrollar este tipo de aplicaciones son el enfoque de "12 Factor".

Los objetivos que busca cumplir "12 Factor"

Esta metodología se presentó a través de un manifiesto publicado en 13 idiomas, en el cual se explican los objetivos que busca cumplir "12 Factor":

  • Configuraciones automatizables y explícitas.

  • Dependencias claras con el entorno para máxima compatibilidad.

  • La aplicación debe ser desplegada en la nube.

  • Despliegue continuo.

  • Aplicaciones enfocadas en la escalabilidad.

Exploremos ahora sí los doce factores:

Los 12 Factores – Metodología de construcción SaaS

Los siguientes son los 12 factores que conforman esta metodología

I. Código base

El código base se coloca en repositorios y los despliegues de las aplicaciones se realizan desde éste. Dependiendo de la complejidad de la aplicación, puede haber más de un repositorio, pero ningún código debe repetirse y todo el código y sus cambios deben estar protegidos dentro de un repositorio.

II. Dependencias

Si el código de nuestra aplicación depende de otro código como pueden ser librerías, módulos o paquetes, es necesario que las dependencias sean explícitas y en caso de que no existan en la aplicación, debe haber un sistema automático que las instale.

III. Configuraciones

El código no debe tener configuración dentro de sí mismo. Debe hacer referencia a las variables de configuración manejadas externamente y fácilmente administrables.

IV. Backing Services

Son aquellos recursos que se pueden conectar a la aplicación, sin importar sin son locales o de terceros.

V. Construir, distribuir y ejecutar

Se deben separar la etapa de construcción y desarrollo de la etapa de ejecución.

VI. Procesos

La aplicación se ejecuta como uno o más procesos sin estado.

VII. Asignación de puertos

Los servicios son publicados mediante la asignación de puertos.

VIII. Concurrencia

Se utiliza el modelo de procesos como escalabilidad.

IX. Desechabilidad

Hacer el sistema más robusto intentando conseguir inicios rápidos y finalizaciones seguras.

X. Paridad en desarrollo y producción

El desarrollo, la pre-producción y la producción deben ser lo más similares entre sí como sea posible.

XI. Gestión de Logs

La gestión de logs debe ser tratada como una transmisión de eventos.

XII. Administración de procesos

Las tareas de gestión y administración deben ejecutarse como procesos que se ejecutan solamente una vez.

Esta metodología brinda la oportunidad de optimizar el desarrollo de Software as a Service (SaaS) a través de 12 principios fundamentales para el desarrollo de Web Apps. Además, es un enfoque que busca la excelencia y la resolución de los problemas comunes que se tienen al desarrollar aplicaciones de cloud computing.

Puede consultar los factores en detalle en el sitio de 12 Factor App en español.

Si su organización tiene interés en implementar proyectos de desarrollo de aplicaciones de la mano de expertos, lo invitamos a contactarnos.


También te puede interesar:
DESARROLLO WEB, OPERACIONES.

Implementando Microfrontends con React y Next.js

TENDENCIAS ALTO NIVEL, DESARROLLO WEB.

Nuxt.js: características clave para desarrollar apps

TENDENCIAS ALTO NIVEL, DESARROLLO WEB.

Next.js: framework para construir web apps

TECNOLOGÍA DE EXPERIENCIA, DESARROLLO WEB.

Los 5 CMS Headless recomendados para Next.js