Home La velocidad es crucial:...

La velocidad es crucial: cómo es Clojure, el lenguaje de programación que usamos en Nu

Por qué elegimos esta tecnología y cómo la usamos para combatir la complejidad y empoderar a las personas

Nubank ha ayudado a cambiar el panorama de los servicios financieros en Brasil. Lanzamos nuestro primer producto en 2014, una tarjeta de crédito sin cargo, y desde entonces nos convertimos en la empresa más innovadora de América Latina y el banco digital independiente más grande del mundo, con más de 18 millones de clientes.

Nuestra cartera de productos incluye, además de la tarjeta de crédito, NuConta, una cuenta de ahorros digital; Nubank Rewards, un programa de recompensas de lealtad; crédito para préstamos personales; y Conta PJ, una cuenta digital para pequeñas y medianas empresas. Tanto Lending como Conta PJ son las incorporaciones más recientes a nuestra cartera, introducidas en 2019, el mismo año en que anunciamos el lanzamiento de nuestras operaciones en dos nuevos países latinoamericanos: México y Argentina.

Una gran parte de nuestro éxito proviene del hecho de que no somos una compañía financiera per se: somos una compañía de tecnología, enfocada en desarrollar soluciones financieras.

En otras palabras: la tecnología está en el corazón de todo lo que hacemos, razón por la cual la ingeniería de software es una competencia central para el Grupo Nubank.

Nos esforzamos por mantener prácticas de desarrollo de software de vanguardia. En Nubank, disfrutamos de los beneficios de haber adoptado conceptos prácticos de programación funcional para construir nuestro negocio desde un inicio. Estos conceptos juegan un papel importante en la claridad y la consistencia de nuestro código fuente, por lo que es importante que los ingenieros los entiendan en cuanto se suman a la empresa.

Estos son algunos ejemplos de prácticas y técnicas que empleamos:

  • Microservicios escalables horizontalmente, escritos las más de las veces en Clojure, usando Finagle, aprovechando técnicas de programación funcional y arquitectura hexagonal (más sobre eso en este video);
  • Trabajos de alto rendimiento y comunicación entre servicios utilizando Kafka;
  • Integración continua y deployment (puesta en producción) en AWS, usando Kubernetes; 
  • Almacenamiento de datos en Datomic y DynamoDB;
  • Monitoreo y observabilidad con Prometheus.

Un dato que puede resultar curioso: la mayoría de nuestros ingenieros nunca habían trabajado con este conjunto particular de tecnologías ni habían estado en contacto con servicios financieros.

Sin embargo, estamos en un nivel de desarrollo de nuestras herramientas que nos permite incorporarlos de manera ágil al ecosistema creado. 

¿Por qué Clojure y programación funcional?

El mundo en el que vivimos tiene máquinas en la nube, con múltiples CPU que nos permiten ejecutar varias tareas en paralelo. Además de eso, la programación funcional es ideal para ambos escenarios, tanto para las finanzas -que es el dominio de Nubank- como para las funciones matemáticas.

Los sistemas anteriores que los ingenieros creamos antes de unirnos a Nubank usaban lenguajes y frameworks que nos obligan a agregar muchas líneas de código para resolver un problema, lo que hacía que la evolución del sistema fuera cada vez más difícil con el tiempo.

Clojure, en cambio, tiene construcciones simples que nos permiten centrarnos en el problema que estamos resolviendo, lo que hace que evolucionar el sistema sea un desafío incremental, y que no se vuelva mucho más difícil con el tiempo.

La mayor parte de nuestro código fuente se puede entender localmente, mirando cualquier función dada, entendiendo sus salidas para cualquier conjunto de entradas. Rara vez hay necesidad de razonar o recrear el estado interno de los objetos. La información se mueve a través del sistema de una manera consistente e inmutable, siendo fácil de componer e inspeccionar (sin encapsularla en un objeto).

Hemos creado una serie de herramientas en Clojure en los últimos seis años, que nos ayudan a ser más rápidos y a escalar a un ritmo acelerado. Con Clojure, podemos crear nuevos productos de una manera muy fácil. Cuando se trata de infraestructura, por ejemplo, tenemos un pipeline de entrega continua que permite que cualquier cambio al código fuente en GitHub se ejecute en producción en 30 minutos. Esto se logra con la ayuda de archivos declarativos de configuración EDN, que definen cómo la implementación y el pipeline se componen. 

El código funcional es mucho más fácil de probar, y eso nos da la confianza para implementar un promedio de más de cincuenta cambios por día en un dominio de misión crítica.

La velocidad es crucial en Nubank, ya que estamos aumentando nuestra base de clientes y expandiéndonos a nuevos segmentos y geografías. Estamos constantemente evolucionando nuestro producto y estructura, por eso siempre estamos buscando personas para unirse a nuestro equipo.

Ingeniería en Nu

Actualmente tenemos más de 400 ingenieros trabajando desde nuestra sede en São Paulo, nuestro hub de ingeniería en Berlín y nuestras oficinas en Ciudad de México y Buenos Aires. Y también fomentamos un entorno global independientemente de la oficina en la que se encuentren, ya que albergamos a más de 30 nacionalidades y el inglés es nuestro primer idioma.

Estamos buscando personas que realmente se apasionen por lo que hacen y estén ávidas por resolver problemas complejos a gran escala, mientras trabajan en un entorno seguro y acogedor. Personas que quieran probar que su trabajo tiene un impacto positivo en la vida de millones de personas quienes, de lo contrario, estarían atrapados en una relación burocrática e ineficiente con su dinero. 

De modo que, si te ves trabajando en Nu, no dudes en contactarnos.

Introduzca su nombre

Quiero recibir el newsletter