Bemmbo Pay: Cómo armamos la primera billetera digital B2B en Chile

Descubre cómo construimos Bemmbo Pay, la primera billetera digital B2B en Chile.

Bemmbo Pay: Cómo armamos la primera billetera digital B2B en Chile

Pagos en las empresas

Una de las razones por la cual partimos Bemmbo fue la cantidad excesiva de papeles de facturas que vimos en empresas tradicionales como ferreterías, comercializadoras y otras del rubro. Era impresionante la cantidad de veces que revisaban un montón de papeles, una y otra vez, para ver si no habían pagado de más, si la cuenta a la cual iban a transferir era la correcta o si había sido firmada (aprobada) por las áreas involucradas en el pago (y más verificaciones que depende de cada empresa).

Pagos de uno de nuestros primeros clientes

También conocimos empresas más tecnológicas, como startups, que llevaban sus finanzas en Excel y generaban un archivo para subir al banco y así pagarles a sus proveedores. Sin embargo, el Excel crecía y crecía, y se perdía mucha información importante, y sobre todo, tiempo valioso de personas de finanzas que tenían que navegar haciendo la misma revisión que con papeles hacían las empresas mas tradicionales. Gente súper creativa y talentosa tenía que estar revisando constantemente errores en vez de estar viendo cual es el mejor proveedor para cada una de sus áreas, haciendo tarea más analítica de planificación, pero en cambio, se veían estancados en un montón de papeles y tareas repetitivas.

Archivo para pagar a sus proveedores de empresas más tecnológicas

Me nacía la pregunta, por qué el pago entre empresas no podía ser igual de fácil que el de personas? Claro, una persona no tiene que pagar 1000 cosas en una semana, pero al menos con aplicaciones como MACH, Tenpo, entre otros, se puede transferir entre personas la comida de una junta de un fin de semana a la velocidad del internet sin problemas. Quizás el pago de empresas con el pago de personas no son comparables, pero no podía evitar pensar que se le había dado harto más cariño al pago de las personas que al de las empresas, se había optimizado hartos procesos, hasta llegar a solamente apretar dos botones (seleccionar contacto, el monto y transferir, aun que a veces ni el monto hay que seleccionar porque el mismo amigo te manda un cobro, con el monto pre-seleccionado, diciendo que son 10.000 por el asado del fin de semana pasado).

Pensándolo bien, lo clave es que se optimizaron un montón de procesos, lo unico que cambia es que para empresas son distintos. Para empresas está la centralización de los pago (proveedores, rendiciones y pagos variados), aprobación (entre personas solamente tienes que estar de acuerdo contigo mismo, en la empresas hay que estar de acuerdo entre áreas y con la gente de la $$), ejecutar el pago y luego contabilizarlo (si, las empresas tienen software contables para estados de resultados y cosas por el estilo).

En este blog, nos enfocaremos en la ejecución del pago y como logramos hacer que la experiencia sea lo más parecido a como pagan las personas hoy en día. Actualmente la ejecución del pago en Bemmbo se ve mas o menos así:

Seleccionas los pagos que quieres pagar (rendición de gastos, pago a proveedores, devolución a un cliente, etc).

Seleccionas tu billetera digital (Bemmbo Pay) y transfieres. Tratando de ser lo más simple posible.

Ejecución

Empresas como MACH y Tenpo tenían una billetera digital donde las personas mantienen un saldo, reciben dinero y transfieren. Nosotros queríamos lo mismo para las empresas, partimos diseñando en un bosquejo súper simple para aterrizar la idea y cómo pasar de nóminas engorrosas a una solución con un par de clicks. El bosquejo se veía algo así:

Abonos y transferencias de Bemmbo Pay en papel

El bosquejo muestra 3 partes claves, primero es recibir fondos, mantener un saldo dentro de la aplicación y transferir fondos. Decidimos dar la primera iteración a esta solución, para los más interesados en el hands-on, ahora voy a detallar en alto nivel cómo abordamos las partes claves del bosquejo y creamos la primera versión de Bemmbo Pay.

Mantener un saldo dentro de la aplicación

Queríamos llevar un registro de los abonos, transferencias, y un saldo final de nuestra billetera digital. Este problema es conocido y ha sido solucionado por varias empresas tecnológicas como Starbucks, Uber, Tinder y -como les había mencionado antes- MACH y Tenpo. Como personalmente había trabajado en MACH, tenía una noción de cómo se hacía. La idea es digitalizar el libro contable que utiliza un contador para llevar los registros de entrada y salida de dinero de una entidad, en este caso, las empresas que usan Bemmbo. Nuestros amigos de Platanus, especificamente el crack de Jaime Bünzli, escribió sobre este concepto y les dejo el blog para que puedan leer más en profundidad. Yo les contaré cómo lo hicimos en Bemmbo. Como somos de re utilizar hartos recursos que generosamente los desarrolladores de AWS han programado para nosotros, buscamos si había algo pre-hecho pero de muy buena calidad (porque manejaríamos dinero, algo importante) y nos encontramos con QLDB: Una base de datos construida por AWS exclusivamente para problemas de transaccionabilidad.

La gracia de QLDB es que viene con conceptos claves de lo que significa tener un libro contable dentro de una aplicación: inmutabilidad, auditable (criptográficamente) y aguanta transacciones como concepto de escritura en la base de datos. Les explicaré brevemente porqué son importantes estos conceptos:

  • Inmutabilidad: Básicamente garantiza que una vez que los datos se registran, no se pueden modificar ni eliminar. Cada cambio se registra como una transacción en una cadena de eventos inmutable, lo que asegura la integridad de los datos a lo largo del tiempo y previene alteraciones humana.
  • Auditable: Esto quiere decir que todas las transacciones son visibles y trazables, con metadatos como autor y marca de tiempo. Permitiendo rastrear cambios y detectar anomalías. Lo más importante es que la cadena inmutable de eventos, respaldada por criptografía, garantiza la confiabilidad de los registros en entornos regulados (si algún cliente quiere verificar su historial de manera exhaustiva, esto facilita un montón las cosas).
  • Transacciones en la base de datos: QLDB implementa transacciones en un orden secuencial, siguiendo el modelo ACID. Esto asegura operaciones seguras y consistentes. Permitiendo re-intentos en caso de fallos sin dejar ningún dato mal ingresado (muy importante cuando se trabaja con dinero)

Sin más vueltas, decidimos implementarlo, pero como queríamos que fuese más simple, buscamos si alguien lo había hecho por nosotros y nos encontramos una versión ya implementada en Java, nuestro equipo la adaptó a Typescript y tarán: teníamos una primera versión de un libro contable, con saldo, transferencias y auditable con un esfuerzo ideal para una primera iteración de nuestra billetera digital.

Abonos

Empezamos a hacer una prueba de la billetera digital con dos de nuestros clientes que más confianza nos tienen. Para modelar el ingreso de dinero, nos aliamos con nuestros amigos de Shinkansen (más adelante explicaré su importancia en nuestro MVP) y abrimos una cuenta en su banco partner. La idea es que nuestros clientes abonaran dinero a esta cuenta y nosotros lo modeláramos como que abono a su billetera, y así fue, esperábamos el abono en nuestra cuenta gracias a la magia de Fintoc y su API para escuchar actualizaciones de movimientos en una cuenta bancaria. La primera versión de la solución de abonos se veía de la siguiente forma:

Primera versión de Abono de Bemmbo Pay

La primera iteración hicimos validaciones de unicidad de los movimientos y alguno que otro caso borde. Suena a una solución simple (gracias a Fintoc), sin embargo, surgieron problemas que nos obligaron a iterar en cómo recibíamos los movimientos. Detallaré más en la segunda iteración.

Transferencias

Ok, teníamos una forma para recibir dinero en nuestra cuenta bancaria y además teníamos modelado -gracias a QLDB y nuestros amigos de AWS- las billeteras de nuestros clientes. Con saldo, registro de movimientos, auditable y robusta. Ahora tocaba mover el dinero hacia afuera. Aquí donde aparece otro partner clave en esta travesía: Shinkansen.

La historia con Shinkansen es particular porque fuimos su primer cliente y tuvimos la oportunidad de probar e iterar con ellos su producto en un estado bien inicial. Lo que hacen es proveer una API para mover dinero conectándose directamente con los cables de los bancos. Justo lo que nos faltaba, una API para mover dinero de nuestra cuenta (billetera de nuestros clientes, virtualizada con QLDB) a sus proveedores, colaboradores y otras empresas. La primera solución se veía más o menos así:

Primera versión de Transferencia de Bemmbo Pay

Luego de un par de intentos logramos hacer la primera transferencia usando Bemmbo en tiempo real, miren que feliz estábamos

Llegó la primera transferencia

Iterar, iterar e iterar

Todo lo mencionado anteriormente fue una primera iteración de nuestra billetera digital que fue utilizada por clientes con una confianza tremenda en nosotros. Para poder disponibilizar esta billetera a todos nuestros clientes, antes tuvimos que pasar por varios aprendizajes que los resumiré a continuación.

  • Re-intentos: Cuando se trata de transferir fondos es muy probable que hayan fallos por datos mal ingresados (cuenta de banco no corresponde u otros), intermitencia de la entidad bancaria o simplemente un fallo no identificado. Por eso, implementamos una máquina de estado usando StepFunctions de AWS para que la lógica de volver a intentar sea idempotente y fácil de volver a ejecutar. Por otro lado también corremos verificaciones de unicidad para no repetir una transferencia que está siendo ejecutada o fue ejecutada.
  • Agregar cola para encolar llamados en ráfaga: En una ocasión uno de nuestros clientes lanzó cerca de 1000 pagos, y adivinen, pasaron cosas que no teníamos previstas. Fallaron varios por limite de QLDB y otros fallaron porque Shinkansen en ese tiempo no soportaba tantas transferencia al mismo tiempo. Esto nos llevó a implementar una infraestructura de encolado (algo parecido a esto) que les da un poco de respiro a QLDB y a Shinkansen. Sin embargo, también implementamos lógica de re-intento de QLDB y Shinkansen implementó en tiempo record mejoras en su API para soportar altos flujos.
  • Chequeo de coherencia: Una de las principales preocupaciones del equipo era saber si el dinero que estaba en la cuenta bancaria concordaba con la suma de saldos de todos nuestros clientes. Era una tarea muy tediosa ver si todo calzaba, por lo tanto, creamos una lógica para mantenernos informado sobre el estado de nuestra cartola con lo que aparece en QLDB y así poder dormir tranquilo.
  • Seguridad: Una de las pregunta más frecuente de nuestros clientes era sobre la seguridad de nuestra billetera y tuvimos que ponerle harto cariño en este ámbito. La información de cada empresa la tenemos en particiones distintas, la lógica para poder abonar y transferir fondos esta protegidas en una VPC donde sólo ciertas partes de nuestra infraestructura son capaces de ejecutar acciones, también solamente algunos usuarios con ciertos permisos pueden mandar una instrucción de mover dinero. Con todo esto en mente, dejamos a nuestros clientes más tranquilos y felices con la seguridad.

Estos aprendizajes no los hubiésemos tenido si no nos lanzábamos con una primera iteración y la confianza de nuestros primeros clientes. Por otro lado, la habilidad de poder iterar de manera veloz fue clave también y eso se lo atribuyo a dos cosas: nuestra infraestructura nos permite tomar cosas pre-hechas y avanzar muy rápido (en este blog pueden leer más sobre nuestra infraestructura) y además tener un servicio al cliente que de seguridad a los clientes que sea lo que sea que pase, se lo solucionaremos y rápido.

Estadísticas de nuestro servicio al cliente, nos demoramos 30s en responderte y 1 hora 20m en solucionar el problema en promedio

Un gran equipo

Un último factor a considerar para poder haber creado Bemmbo Pay y haberle podido dar una experiencia más cercana a los pagos entre personas a nuestros clientes, fue el gran equipo que estuvo detrás de esto. Si bien todo el equipo aportó su granito de arena, Rodrigo Valdes y Vicente Manriquez fueron los que llevaron un simple bosquejo a una solución robusta utilizada por múltiples clientes. Además de su tremenda calidad técnica, destaco mucho su capacidad de iterar y de estar comprometidos con la calidad de experiencia de pago que tienen nuestros clientes. ¡Son unos grandes!

Un día viernes post pega trabajando en BemmboPay con el equipo estrella

Próximos pasos

Si bien ahora nuestros clientes pueden pagar en un par de clicks, nos falta mucho por avanzar, pero tenemos claro una cosa:  Seguiremos creando el software donde los equipos de finanzas de LATAM se transformen en súper equipos y no pararemos hasta lograrlo.

Cualquier duda no duden en escribirme a cristobal@bemmbo.com

Únete a más de 100 Empresas que están automatizando su cobranza y pagos con Bemmbo