El camino (técnico) hasta el MVP

Publicado el 1 de julio de 2021, por Raúl Recacha

Ya está publicada nuestra página para las ofertas de Manfred. Como suele decir David, si no da vergüenza publicarlo, es que vamos tarde. Esta página no es más que la punta del iceberg que hay debajo, y la primera piedra de muchas más que vendrán.

La Comunidad Manfredita es curiosa por naturaleza, y quizá os interese saber qué tecnologías estamos usando y por qué.

Estructura

Partíamos de una web + blog en WordPress, que de momento hemos dejado tal cual. Por otro lado tenemos un monorepo con 3 packages:

  • /talent → aplicación web que por ahora muestra un listado de ofertas y la nueva página de ofertas (primera iteración, hay secciones que mejorarán próximamente). Más adelante, los manfreditas también podrán gestionar aquí su carrera y obtener valor, independientemente de que busquen o no cambiar de trabajo. Es decir, nuestro “LinkedIn pero bien hecho” 😎.
  • /backoffice → aplicación web donde gestionamos toda la información y que, por ahora, se limita a usuarios, empresas y ofertas. A futuro, este backoffice irá creciendo cada vez más, y una parte de él se convertirá en otro producto… pero esa historia ya será contada más adelante 😉
  • /server → nuestro backend, el corazón de Asgard, la API que da soporte tanto a /talent como al /backoffice.

Construimos con yarn, y usamos lerna para gestionar los diferentes packages del monorepo.

Stack

Nuestro stack es muy javascriptero: React + Next.js + Node + Express.js.

stack página de ofertas de Manfred

Para el frontend de la página de ofertas hemos optado por React + Next.js (con TypeScript, por supuesto, que ya tenemos una edad y el tipado fuerte nos hace dormir mejor… jejeje).

¿Por qué React? Podríamos haber elegido un framework como Angular o Vue, y habría estado igualmente bien. Pero nos decantamos por React por ser, de lejos, el más utilizado. Esto es una ventaja cuando haces producto, tanto a la hora de encontrar gente, como para minimizar riesgos de tecnología que “pase de moda”. También porque es una librería muy versátil a la hora de desarrollar un producto propio, totalmente ad-hoc, que irá evolucionando con total libertad. También influyó que Marina tuviese ya formación previa en React, así no la mareamos 🙂

De Next.js nos enamoraron varias cosas: su simplicidad con el routing, la potencia del server-side rendering y sus ventajas a nivel de rendimiento y SEO. Y por supuesto Vercel y en especial su módulo Analytics que nos ayudará a darles a los manfreditas la mejor experiencia posible.

Para el backend optamos por Node + Express. Nuevamente no había un motivo de peso importante para decantarnos por Java, Python, o cualquier otro lenguaje. Nos gustaba la idea de usar JavaScript en todas las capas de nuestra aplicación, porque es el lenguaje que enseñamos a nuestros scouts (ya sabéis, en Manfred “todos somos desarrolladores y todos somos recruiters", es uno de nuestros mantras); y, también, apostamos porque los desarrolladores front aporten en el back, y viceversa. Compartir el mismo lenguaje facilita esta colaboración.

En cuanto al testing, los unitarios están implementados con Jest, y para los end-to-end nos hemos decantado por Cypress.

Como base de datos usamos PostgreSQL. Valoramos Mongo, pero al final nos quedamos con la opción más estándar a nuestro entender, ya que nos permite tener un modelo de entidad-relación sin que eso impida guardar datos en formato JSON. El ORM que nos permite comunicarnos con ella desde Node no podía ser otro que Sequelize.

Otras librerías y herramientas que usamos para la página de ofertas y que pueden ser de interés son:

  • i18next para la internacionalización
  • slugify para generar el slug de las ofertas
  • winston para los mensajes de log
  • … y un largo etcétera 🙂 

Infraestructura

Aún somos un equipo de desarrollo pequeño, y no nos queríamos preocupar (en exceso) de la infraestructura, pero sí teníamos claro que, en una aplicación donde manejamos datos personales de miles de candidatos, la seguridad es lo primero. La solución pasaba por un entorno cloud que nos permitiese escalar dinámicamente y añadir las capas de seguridad necesarias.

Cualquiera de las 3 grandes cloud nos servían, pero nos decantamos por AWS porque era la que mejor conocíamos, y porque su extenso catálogo nos proporcionaba muchos de los servicios que necesitábamos.

Infrastructura página de ofertas de Manfred

Algunos de los servicios de AWS que usamos actualmente son:

  • Application Load Balancer.
  • Amazon Route 53 como servicio de DNS.
  • EC2 configurado con autoescalado en diferentes zonas para ofrecer alta disponibilidad.
  • S3 para almacenamiento de estáticos y otros ficheros.
  • Cloudfront para servir el frontend.
  • Lightsail para el WordPress.
  • RDS para nuestra base de datos en un volumen encriptado.
  • Simple Email Service para el envío de emails.
  • …Y algunos servicios más relacionados con la seguridad.

Con Terraform hemos definido nuestra infraestructura como código, y la tenemos en nuestro control de versiones.

Servicios de terceros

Para la autenticación del backoffice (y en un futuro cercano de los manfreditas) nos apoyamos en Auth0. Queríamos la máxima seguridad, login social (OAuth), 2FA, etc., pero las manos en el equipo de desarrollo son muy limitadas. Por lo que no tenía sentido dedicar tiempo a reinventar la rueda implementando el enésimo sistema de login existiendo servicios tan buenos como Auth0. Quizá más adelante nos planteemos algo más ad-hoc, si nos aporta verdadero valor.

Tooling

Por nombrar algunas de las herramientas que usamos en nuestro día a día:

  • Github: donde alojamos nuestro repositorio git; además usamos Github Actions para el CI/CD, que de momento nos es más que suficiente.
  • Formateo y estilo: usamos ESLint y Prettier, conventional commits, husky,...
Tooling página de ofertas de Manfred
Publicado el 1 de julio de 2021, por Raúl Recacha
¡Súbeme!