Un modelo de scoring entrenado desde cero, y la infraestructura de llamadas a su alrededor

Única ingeniera de un producto entero de generación de leads, B2B y B2C: la arquitectura, el backend, el front end, las aplicaciones móviles, el machine learning y los servidores de producción.

1 modelo de scoring diseñado, entrenado y servido en casa
2 bases de datos - transaccional y analítica
3 aplicaciones Flutter entre iOS y Android
1 ingeniera en todo el producto
MI PAPEL
Todo. No había nadie más en el software.
STACK
Django con REST y GraphQL, PostgreSQL, ClickHouse, Flutter, Ubuntu con Nginx y Docker, un backend propio de orquestación VoIP.
LO MÁS DIFÍCIL
Sustituir una API de scoring de terceros por algo mío - y poder demostrar que era mejor, no solo más barato.

La situación

Un negocio de lead generation que vendía en Estados Unidos, con un producto que tenía que hacer tres cosas a la vez: captar y cualificar leads, decidir cuánto vale cada uno y enrutar llamadas entre compradores y vendedores en tiempo real. Cuando llegué yo no había equipo de ingeniería. Estaba yo.

La calidad de los leads la puntuaba una API de terceros que cobraba por llamada. Funcionaba, en el sentido de que devolvía un número. No se podía ajustar, su latencia era el problema de otro, su precio era la decisión de otro, y sus casos límite relacionados con la legislación estadounidense de telemarketing eran la interpretación de otro.

El modelo de scoring

Lo sustituí por un modelo nuestro: diseñado, etiquetado, entrenado, servido y evaluado en casa, junto con el pipeline de features que lo alimentaba.

Las entradas fueron la parte interesante - device intelligence, el tipo de línea y consultas de carrier, datos de reputación, eventos de comportamiento durante la propia cumplimentación del formulario y metadatos de consentimiento. Que un número sea un móvil de un carrier grande, y que la persona haya rellenado el formulario en once segundos o en noventa, dice más sobre el valor del lead que casi todo lo que la gente pone en los campos demográficos.

Internalizarlo nos compró cuatro cosas que el proveedor no podía vender: control sobre la latencia, un coste por lead que bajaba con el volumen en lugar de subir, nuestra propia lectura de los casos límite de cumplimiento normativo y - lo más importante - la posibilidad de decidir cómo debía influir la confianza en el enrutamiento y en el precio. Un score que no puedes interrogar es un score sobre el que no te atreves a actuar.

El resto del producto

Un backend Django que exponía tanto REST como GraphQL, sobre PostgreSQL para los datos transaccionales y ClickHouse para la analítica de gran volumen y la telemetría de scoring - dos bases de datos porque una sola forma de consulta no sirve a las dos, y fingir lo contrario es como la analítica acaba ralentizando justo lo que da el dinero.

El back office de admin tenía APIs JWT que hacen introspección de los metadatos del propio admin de Django, así que añadir un modelo lo exponía automáticamente a los clientes móviles. Eso ahorraba una semana cada vez y, más valioso todavía, eliminaba una clase de bugs en la que la aplicación móvil y el admin web no se ponían de acuerdo sobre cómo era un registro.

Infraestructura de llamadas de punta a punta: varias plataformas de dialer y de carrier para outbound e inbound, servicios de enrutamiento, una capa de distribución entre compradores y vendedores y un backend propio que orquestaba el flujo en vivo desde la llamada hasta la transferencia, la grabación y el resultado de la llamada. Agentes de voz en outbound. Verificación continua contra las reglas de do-not-call y de consentimiento para telemarketing, ligada directamente a la aceptación del lead y no pegada al final, porque una verificación de cumplimiento que se ejecuta después de haber llamado ya es una constancia de la infracción, no un control.

Después, las partes que no cuenta nadie: un CMS propio, tres aplicaciones Flutter para iOS y Android que cubren B2B, B2C y admin, y la infraestructura de producción - Ubuntu endurecido, Nginx, Docker, releases sin downtime, DNS en dos proveedores, certificados, firewall y bloqueo de intrusiones.

Cómo fue estar sola en todo el producto

Clarificador, sobre todo. No tienes con quién negociar una interfaz y un malentendido no tiene dónde esconderse. Pero pone un techo duro sobre cuánto puede estar en marcha a la vez, y convierte la documentación en un acto de autodefensa, no en una cortesía - la persona que no va a recordar por qué esta cola tiene un retraso de dos segundos soy yo, en marzo.

Lo que haría de otra manera

Habría construido la evaluación y la monitorización del modelo el mismo día que el modelo, no después de que entrara en producción. Se comportó bien, y eso lo sabía por la evaluación offline - pero durante las primeras semanas no habría podido demostrar rápido que seguía comportándose igual de bien en producción. Ese hueco es incómodo y era evitable.