La situazione
Un'azienda di lead generation che vendeva negli Stati Uniti, con un prodotto che doveva fare tre cose insieme: catturare e qualificare lead, decidere quanto valeva ciascuno e instradare le chiamate tra acquirenti e venditori in tempo reale. Quando sono arrivata io non esisteva un team di ingegneria. C'ero io.
La qualità dei lead veniva valutata da un'API di terze parti tariffata a chiamata. Funzionava, nel senso che restituiva un numero. Non si poteva regolare, la sua latenza era un problema di qualcun altro, il suo prezzo era una decisione di qualcun altro, e i suoi casi limite legati alla normativa americana sul telemarketing erano l'interpretazione di qualcun altro.
Il modello di scoring
L'ho sostituita con un modello nostro: progettato, etichettato, addestrato, servito e valutato in casa, insieme alla pipeline di feature che lo alimentava.
Gli input sono stati la parte interessante - device intelligence, tipo di linea e interrogazioni sul carrier, dati di reputazione, eventi comportamentali durante la compilazione stessa del modulo e metadati di consenso. Che un numero sia un cellulare su un carrier importante, e che la persona abbia compilato il modulo in undici secondi o in novanta, dice più cose sul valore del lead di quasi tutto quello che le persone mettono nei campi demografici.
Portarlo in casa ci ha dato quattro cose che il fornitore non poteva vendere: il controllo sulla latenza, un costo per lead che scendeva con il volume invece di salire, la nostra lettura dei casi limite di compliance e - la cosa più importante - la possibilità di decidere come la confidenza debba guidare il routing e il prezzo. Un punteggio che non puoi interrogare è un punteggio su cui non hai il coraggio di agire.
Il resto del prodotto
Un backend Django che esponeva sia REST sia GraphQL, su PostgreSQL per i dati transazionali e ClickHouse per l'analitica ad alto volume e la telemetria di scoring - due database perché un solo tipo di query non serve a entrambe le cose, e fingere il contrario è il modo in cui l'analitica finisce per rallentare proprio la cosa che porta i soldi.
Il back office di admin aveva API JWT che fanno introspezione sui metadati dell'admin di Django, così aggiungere un modello lo esponeva automaticamente ai client mobile. Questo faceva risparmiare una settimana ogni volta e, cosa più preziosa, eliminava una classe di bug in cui l'app mobile e l'admin web non erano d'accordo su come fosse fatto un record.
Infrastruttura di chiamata da un capo all'altro: più piattaforme di dialer e di carrier per outbound e inbound, servizi di routing, un livello di distribuzione tra acquirenti e venditori e un backend mio che orchestrava il flusso live dalla chiamata fino al trasferimento, alla registrazione e alla disposition. Agenti vocali in outbound. Verifica continua rispetto alle regole do-not-call e di consenso per il telemarketing, collegata direttamente all'accettazione del lead e non aggiunta alla fine, perché una verifica di compliance che gira dopo che hai già chiamato è la messa a verbale della violazione, non un controllo.
Poi le parti che non conta nessuno: un CMS su misura, tre applicazioni Flutter per iOS e Android che coprono B2B, B2C e admin, e l'infrastruttura di produzione - Ubuntu irrobustito, Nginx, Docker, rilasci senza downtime, DNS su due provider, certificati, firewall e blocco delle intrusioni.
Com'è stato essere sola su tutto il prodotto
Fa chiarezza, soprattutto. Non hai nessuno con cui negoziare un'interfaccia e un malinteso non ha dove nascondersi. Ma mette un tetto rigido a quanto può essere in lavorazione nello stesso momento, e fa della documentazione un atto di autodifesa, non una cortesia - la persona che non si ricorderà perché questa coda ha un ritardo di due secondi sono io, a marzo.
Che cosa farei diversamente
Avrei costruito la valutazione e il monitoraggio del modello lo stesso giorno del modello, non dopo che era andato in produzione. Si è comportato bene, e lo sapevo dalla valutazione offline - ma nelle prime settimane non avrei potuto dimostrare in fretta che si comportava altrettanto bene in produzione. Quel vuoto è scomodo ed era evitabile.