Escoger la arquitectura correcta
Tags: tip, desarrollo, ecuador
Published: 2021-03-16 15:27:09

---
title: 'Escoger la arquitectura correcta'
published: true
tags: ['tip', 'desarrollo', 'ecuador']
canonical_url: https://marceloandrader.github.io/blog/2021/03/16/escoger-la-arquitectura-correcta/
---

Ayer en Ecuador se iba a dar acceso a una página web para registrarse
para recibir la vacuna en contra de COVID-19 **planvacunarse.ec**, si eres de Ecuador
probablemente ya sabes lo que pasó después, la página paso caída todo el día.

El tema me pareció interesante traerlo en esta publicación
primero porque es de interés nacional y segundo porque cada día la tecnología
afecta más y más a nuestras vidas y la de todos los que nos rodean.

Personalmente pienso que la vacunación no debía haberse hecho con registro
previo, uno porque el acceso a esta opción está restringiendo a mucha
gente que no tiene Internet, computadora y conocimientos para usar
la página web; y dos creo que el gobierno debería saber lo suficiente de todos
sus habitantes vía registro civil, IESS, escuelas, etc. como para hacer
un listado y publicar el listado de las personas elegibles en cada fase.

Si no era una opción hacerlo de esa forma, ahora sí vamos a la parte
técnica que también deja mucho que desear.

No tengo todos los requerimientos que debe cumplir el sistema de registro
para vacunas, pero vamos a asumir los siguientes requerimientos funcionales:

**Requerimiento informativo:**

```
Como usuario visitante de planvacunarse.ec
Debo poder leer la información acerca de las fases de la vacunación
Para poder estar informado y saber cuando me va a tocar el turno.
```

**Requerimiento de registro:**

```
Como usuario visitante de planvacunarse.ec
Debo poder ingresar mi cédula de identidad
ingresar un email para recibir notificaciones
y contestar algunas preguntas médicas
Para poder quedar registrado y que me notifiquen
lugar y fecha de vacunación en un futuro.
```

Vamos a pretender que debemos diseñar un software que soporte estos
requerimientos funcionales. Para un desarrollador junior es fácil
tomar la herramienta que uso todos los días y hacer que cumpla estos
dos requerimientos, en el caso de quien se encargó de esta página
su herramienta fue wordpress para el sitio informativo y el plugin de formularios
para el registro, funciona para algunos cientos de visitas concurrentes,
dependiendo de las características del servidor, pero para millones
de no-vacunados simplemente no.

Como arquitectos de software debemos hilar más fino y obtener requerimientos
que no están expresados explícitamente en los anteriores, temas como: quiénes
van a usar este software, desde qué plataformas, con qué tipos de red, a cuántas
personas podemos dar servicio al mismo tiempo, cuál es el nivel de servicio
mínimo esperado, etc. etc.

Escoger la arquitectura correcta se trata de analizar y tomar decisiones con
todos los requerimientos explícitos e implícitos que el software debe tener.
Es probable que las herramientas que tienes a disposición entren en conflicto
con los requerimientos de la arquitectura y eso está bien, no siempre
vas a poder usar las herramientas que te gustan o te sientes cómodo.

En mi opinión profesional este sitio de registro de vacunación debió
haberse hecho con la siguiente arquitectura:

- Generador de sitios estáticos, como hugo, gatsby o nextjs. para satisfacer
  el primer requerimiento informativo. Esta opción tiene la ventaja de que
  puedes usar servicios de distribución de contenido y cache que han sido probados
  por empresas globales para servir sus sitios web. Servicios como AWS Cloudfront
  o Cloudfare son obligatorios en este tipo de ambientes en el que esperamos millones
  de visitantes al mismo tiempo. Dentro del mismo sitio estático se pudo haber tenido
  una aplicación de página única (single page application) para manejar el
  registro y usar una API hacia el backend para guardar la información.

- Funciones serverless, como AWS lambda o Serverless computing de google cloud para
  cumplir con el segundo requerimiento de registro. Esto permite tener flexibilidad
  a la hora de escalar la parte dinámica del sitio, como es recibir y guardar información
  para futuro. Este tipo de ambientes permiten recibir gran cantidad de tráfico
  sin manejar servidores.

- Y para la parte de guardar la información una base de
  datos SQL no tiene mucho sentido, ya que el requerimiento principal de guardar
  la información lo más rápido posible no es una característica de estas bases, para eso
  usaría una base mucho más eficiente como DynamoDB en AWS que está diseñada
  para manejar escalas de trillones de peticiones por día y 20 millones de peticiones por segundo.
  Es decir todo el Ecuador se pudo haber registrado sin problemas en poco tiempo.

Esto solo fue un experimento mental, estoy seguro que hay muchos más requerimientos internos
como validar cédulas con el registro civil, validar emails, etc. Para la brevedad
del artículo decidí dejarlos afuera. Por otro lado estoy seguro que haya otras herramientas
con las que se puede construir una arquitectura correcta, ustedes que hubieran usado?

Puedes contestarme registrandote y contestando al e-mail de bienvenida.