Las primeras decisiones a tener en cuenta en aplicaciones web - First Decisions

En el contexto actual en el que la mayoria de los dispositivos que acceden a internet son móviles, el auge de tecnologias como NoSQL, la arquitectura de microservicios y tecnologias orientadas a eventos, se ha iniciado el uso de tecnologias y arquitecturas sin que sean las mas adecuadas para la construcción de aplicaciones desde cero. Aquí se describen decisiones sobre arquitectura, tecnología y practicas claves para el inicio de aplicaciones web desde cero. Tenga en cuenta que estas decisiones no necesariamente son adecuadas para todos los proyectos, usted debe tener criterio para decidir si aplicarlas o no segun el contexto en el que se encuentre.

Sobre el documento

Este documento se encuentra en sus primeras versiones y se considera aun construcción, carece aun de revisiones (inclusive ortográficas), sin embargo se publica porque considero que puede ser util. Tambien es importante advertir que si bien este documento no corresponde a una copia o traducción de otro u otros documentos, es muy posible antes otras personas expresaran estas mismas ideas con palabras similares, si este es el caso no tengo ningun problema en admitirlo, procediendo a modificar este documento agregando referencias a otros autores. Si deseas hacer algun comentario u opinión y quieres compartirlo, entonces puedes escribir en mi cuenta de Twitter.

Monolito Primero (Monolithic First)

Aplique una arquitectura monolítica en lugar de usar microservicios
La arquitectura de microservicios es bastante compleja de implementar, es util para construir sistemas muy grandes y escalables, de hecho es una arquitectura que se utiliza para evolucionar monolitos. Dado que cuando se esta construyendo aplicaciones web desde cero es poco probable que tenga necesidades como las anteriormente descritas entonces no recomiendo como arquitectura inicial la de microservicios. Para ver mas al respecto MonolithFirst de Martin Fowler.

Arquitectura de tres capas Primero (Three layer First)

Aplique una arquitectura de tres capas en lugar de usar otro tipos de arquitecturas
Otro tipo de arquitecturas suelen ser mucho mas complejas de implementar, sin ningun beneficio y no se requieren en una etapa inicial de un proyecto.

REST Primero (REST First)

Desarrolle servicios tipo RESTful como medio de comunicación
Desarrollar y consumir servicios web tipo RESTful es mucho mas facil si se compara con tecnologías como SOAP.

SQL Primero (SQL First)

Use bases de datos relacionales
Las bases de datos relacionales tienen ventajas como ser bien conocidas y ofrecer caracteristicas ACID. Sin embargo, las bases de datos relacionales tienen algunos de estos problemas: no escalan bien y tienen problemas para manejar grandes cantidades de datos. Por el contrario las bases de datos no relacionales son menos conocidas, usualmente no ofrecen caracteristicas ACID y tienen distintos paradigmas para almacenar la información, pero escalan mucho mas facil que los motores relacionales. Si revisamos, las ventajas que tienen los motores no relacionales no son necesarias para iniciar la mayoria de las aplicaciones, y sus desventajas si pueden ser problemáticas.

JavaScript Primero (JavaScript First)

Desarrolle la capa de presentación usando JavaScript/HTML5/CSS3.
Usar frameworks JavaScript como Vue.js, React, Angular entre otros es en general mucho mas agil que desarrollar usando tecnologias que generen el front-end desde el servidor.

Búsqueda de texto completo Primero (Full text search First)

Use busqueda de texto completo en bases de datos relacionales.
Antes de usar otras tecnologias de busqueda de texto como lo puede ser Elastic Search aprobeche las capacidades de busqueda de texto completo que ofrecen las base de datos relacionales.

Móvil Primero (Mobile First)

Diseñe sus formularios web adaptables.
Hoy en dia la mayoría de los dispositivos que se conectan a internet son móviles, por lo cual es indispensable que toda aplicación web sea diseñada para adaptarse a distintas tamaños de pantalla.

Hilo por peticion Primero (Thread per request First)

Use tecnología que cree hilos para atender peticiones.
Usar frameworks asincronos para desarrollar es muy eficiente, sin embargo programar es mucho mas complejo y no trae reales beneficios al no ser que desarrolle aplicaciones que manejen muchas peticiones concurrentes, esto por suspuesto no sucede (o es poco probable) que suceda cuando se esta desarrollando una aplicación web desde cero.

Sin estado Primero (Stateless First)

Construya sus aplicaciones sin estado
Construir aplicaciones con estado tiene grandes incovenientes como mayor consumo de memoria y dificultad para escalar. Mas sobre esto puede ver en Stateful and Stateless Applications Best Practices and Advantages

Pruebas unitarias Primero (Unit test First)

Automatice las pruebas unitarias
Algunas ventajas del uso de pruebas unitarias se puede ver en 8 Benefits of Unit Testing

Trunk based development Primero (Trunk based development First)

Use trunk based development como modelo de ramas
Prefiera Trunk based development como modelo de administración de ramas sobre Git Flow. Para ver una comparación entre los dos modelos puede ver Trunk-based Development vs. Git Flow.