Quando un cittadino deve fare una voltura o portare un documento, prenota un appuntamento allo sportello dell'azienda che gli fornisce acqua, gas o energia. Il portale è l'agenda condivisa di operatrici e personale del committente: oltre centomila appuntamenti dal 2020, e sempre appuntamenti già fissati per le settimane successive. Non esisteva un momento per «spegnere e riaccendere».
01Il punto di partenza
Il vecchio portale funzionava, ma le sorprese non mancavano: le regole di disponibilità (orari, capienza, centinaia di eccezioni e festività) stavano in programmi compilati di cui non esisteva più il sorgente — le abbiamo ricostruite leggendo le interrogazioni al database rimaste dentro. Una regola stava addirittura nel codice della pagina web. Le notifiche SMS interrogavano tabelle che non esistevano più: erano ferme da tempo e nessuno se n'era accorto. E l'appuntamento non registrava per quale azienda fosse, un dato che sugli sportelli condivisi semplicemente mancava.
02Le scelte
Un'applicazione nuova, non una ristrutturazione. Scritta in Python con un framework maturo e open source, su una macchina cloud in una regione italiana, intestata al cliente e amministrata da noi: l'infrastruttura è loro, noi la gestiamo. Il committente è una riga di configurazione: aggiungere un'azienda non richiede più un rilascio. Separazione rigorosa: sugli sportelli condivisi, gli appuntamenti dell'altra azienda per l'operatore non esistono, né in calendario né nella ricerca.
03La migrazione: con la gente già in coda
Il passaggio è avvenuto sportello per sportello, con l'autorizzazione esplicita per ciascuno. Oltre ventisettemila appuntamenti storici e futuri sono stati travasati, in modo ripetibile (ogni riga ricorda la propria origine, niente doppioni) e silenzioso (nessuna email di conferma partita per appuntamenti di anni prima). Per qualche giorno i due portali sono rimasti accesi in parallelo, con una sonda che ogni mezz'ora riportava sul nuovo gli appuntamenti presi sul vecchio; poi un avviso, infine il vecchio in sola lettura. Dove un dato non c'era, non lo abbiamo inventato.
04Sicurezza, verificata dall'esterno
Un portale su internet va controllato come lo guarderebbe chi non dovrebbe entrarci. La verifica ha trovato un solo problema serio: nessun limite ai tentativi di accesso. Chiuso lo stesso giorno, applicato solo alla pagina di login. Il resto era in ordine: cifratura moderna, intestazioni di sicurezza, database raggiungibile solo dalla macchina stessa, accesso amministrativo da un solo indirizzo. E i dati non stanno solo in cloud: ogni notte una copia completa scende su un server in sede.
05Cosa abbiamo imparato
1. Quando le regole stanno nel codice perso, i dati raccontano comunque la verità. 2. Non si inventano i dati che mancano: meglio un campo vuoto e dichiarato che un valore plausibile e falso. 3. Le migrazioni si fanno con le persone dentro: parallelo, sonda, avviso, sola lettura. Mai un salto nel vuoto. 4. La sicurezza si verifica da fuori, e i controlli automatici vanno a loro volta controllati.