Immaginate un giovane developer di Lignano Sabbiadoro, che per comodità chiameremo Stegosandro: fan sfegatato di Cartoni Morti, fresco di studi, entusiasta e pronto a rivoluzionare il mondo con la sua idea per una nuova app di prenotazione online.
Stegosandro ha a disposizione tutto ciò che gli serve: Firebase per il back-end, Stripe per i pagamenti, Auth0 per la gestione degli accessi, AWS Lambda per le funzioni serverless e Zapier per le automazioni. In poche settimane, l’app è pronta e funzionante. Ogni pezzo si incastra alla perfezione e l’entusiasmo cresce.
Tutto sembra procedere a meraviglia, finché un giorno arriva l’imprevisto. La chiave API di uno dei servizi viene revocata per errore (o per un aggiornamento delle policy). L’app smette di funzionare. I clienti non riescono più ad accedere e i pagamenti vengono rifiutati. Nel panico, Stegosandro si rende conto di non avere il controllo di nulla. Per ogni componente critico dell’applicazione, deve contattare il supporto di terze parti, aspettare risposte e adeguarsi ai loro tempi. Il paradosso diventa evidente: non ha proprio “sviluppato” un’applicazione, ma piuttosto ha solo “assemblato” pezzi di applicazioni di altre aziende.
A questo punto, Stegosandro cerca aiuto e si rivolge a uno sviluppatore con più esperienza. Il veterano non si limita a risolvere il problema, ma gli pone una domanda fondamentale: “Sai esattamente cosa fa ogni servizio che hai integrato?” La risposta, ovviamente, è un imbarazzato “no”. Nessuno aveva mai insegnato a Stegosandro come “guardare sotto il cofano”.
Il veterano gli mostra un approccio diverso. Gli spiega come avrebbe potuto realizzare un sistema di autenticazione self-hosted con Keycloak o OAuth2. Per le automazioni, gli fa vedere le potenzialità di uno stack Node.js + cron job. Per la gestione dei pagamenti, lo introduce al concetto di API self-hosted o l’uso di alternative open source. Per l’hosting, gli spiega che avrebbe potuto impostare uno o più server con NGINX e gestire tutto tramite ISPConfig, mantenendo il controllo totale del flusso di dati, delle chiavi di accesso e persino della latenza.
In quel momento, Stegosandro si rende conto di non essere mai stato un “developer” nel senso tradizionale del termine, ma piuttosto un “assemblatore di servizi”. Non aveva mai avuto piena consapevolezza di cosa accadesse sotto il cofano. Da quel giorno, decide di investire tempo per imparare a configurare un server self-hosted, a creare container Docker e a gestire un’infrastruttura autonoma. Ora non dipende più da Firebase o AWS, a meno che non scelga di farlo consapevolmente e valutando rischi e benefici delle sue scelte. Inoltre, ora sa esattamente dove sono i suoi dati e chi ne ha il controllo.
Questo aneddoto non è solo la storia di Stegosandro, ma è la realtà quotidiana di tanti developer dei giorni nostri, troppo concentrati sul “time to market” e troppo dipendenti da servizi esterni. Siamo in un’epoca in cui la complessità apparente aumenta, ma la conoscenza reale diminuisce. Le API ci permettono di fare tutto, ma la domanda è: “Cosa accade quando l’API non risponde?”
La libertà non si ottiene con la semplicità di una dashboard, ma con la consapevolezza di come funziona davvero quello che stiamo facendo. E questa consapevolezza non si trova in un abbonamento a 19,99 € al mese.