La situazione
Un prodotto di benessere mentale con tre business dentro: un abbonamento per i consumatori, un portale per i datori di lavoro venduto alle aziende per i loro dipendenti e un marketplace dove gli utenti prenotano sessioni video con professionisti. Sopra tutto questo, un motore di raccomandazione che suggerisce che cosa dovrebbe fare una persona dopo, partendo da come dice di sentirsi.
Il terzo è il motivo per cui questo progetto merita di essere raccontato. Un motore di raccomandazione che suggerisce un esercizio di respirazione a qualcuno leggermente stressato è una funzionalità piacevole. Lo stesso motore che suggerisce un esercizio di respirazione a qualcuno in crisi è un errore grave. La domanda di ingegneria non è come lo costruisci - è come sai che non lo farà.
Che cosa ho costruito
Un backend Django e DRF con davanti un'applicazione React 18, consegnati come un unico sistema: abbonamenti e fatturazione, il portale per i datori di lavoro con la propria gestione dei posti, il marketplace di telemedicina su Zoom Video SDK, le funzioni di comunità, la gamification e un back office amministrativo completo per il team editoriale.
Il motore di raccomandazione
Un ibrido, non un modello puro. Da un check-in strutturato si ricava una valutazione graduata dello stato del sistema nervoso, e quel grado guida un campionamento pesato su un catalogo, invece di una lista statica ordinata - così il contesto batte la popolarità, e due persone in stati diversi non ricevono mai la stessa risposta solo perché un elemento è in generale ben valutato. Gli slot di scoperta, con un cooldown, impediscono al catalogo di collassare sugli stessi venti elementi, e l'hot path aggira completamente l'ORM, perché gira su ogni schermata.
Due provider di IA stanno dietro un'unica astrazione, commutabili dall'admin, con caching sulle risposte per tenere prevedibile il costo per utente. La scelta del provider è una decisione di configurazione, non di architettura - cosa che ha contato nel giro di un anno, quando i prezzi sono cambiati.
Retrieval che resta ancorato
Circa trentamila soluzioni distinte sono state estratte da circa novantacinque libri e indicizzate per il retrieval. L'ancoraggio è il punto centrale: il sistema risponde da quel corpus, non dall'impressione generale che un modello ha dei consigli di benessere. La ponderazione secondo l'adeguatezza nelle situazioni di crisi tiene i suggerimenti inappropriati lontani dagli stati gravi, i limiti di diversità impediscono a una sola fonte di dominare, e un indice di nutrizione in whitelist impedisce al modello di scivolare in consigli medici che non gli compete dare.
Il coach conversazionale che ci sta sopra ha memoria persistente tra le sessioni, un controllore di cadenza che spinge la conversazione verso un'azione concreta invece di lasciarla vagare piacevolmente, e una macchina a stati di moderazione a tre avvertimenti per i contenuti che dovrebbero chiudere lo scambio e passare la mano.
La parte di cui vado più fiera
Niente di quanto sopra vale qualcosa come semplice affermazione. Perciò ho costruito un harness Monte Carlo che genera utenti sintetici con stati vari e avversariali e li fa passare attraverso il motore reale.
Centoventimila sessioni in due esecuzioni, verificando due proprietà: che nessuna sessione in stato di crisi riceva mai una raccomandazione inappropriata e che nessun elemento del catalogo sia irraggiungibile - una scheda morta è contenuto che qualcuno ha scritto e che nessuno vedrà mai. Entrambe hanno tenuto.
L'harness è esposto come azione con un solo clic nell'admin, così il team editoriale lo rilancia dopo ogni modifica di contenuto invece di aspettare un ingegnere. È questa la parte che ne fa una proprietà di sicurezza e non uno screenshot del giorno del lancio: è verificato dalle persone che lo possono rompere, esattamente nel momento in cui potrebbero romperlo.
Una funzionalità di IA che non ha misurato nessuno non è una funzionalità. È un rischio che nessuno ha messo a prezzo e che per caso fa bella figura in demo.
Commercio e conformità
Abbonamenti Stripe con un motore bilingue di piani e sconti modificabile dall'admin, fatturazione elettronica con emissione automatica e sospensione in caso di insoluto, un motore di commissioni ambassador su più livelli, dieci integrazioni con wearable via OAuth e scoring dei lead che combina regole, un modello e un passaggio di AI.
Che cosa farei diversamente
Scriverei l'harness di valutazione prima del motore, non poco dopo. Ho costruito il motore di raccomandazione, poi ho costruito la cosa che lo dimostra - e ho perso una settimana a modificare il motore per poterlo testare. Se fossi partita da "che cosa dovrò dimostrare su questo?", il design sarebbe uscito meglio e con una settimana di anticipo.