System Design
Come sto imparando il system design
La maggior parte dei contenuti di system design presume che tu abbia già fatto girare qualcosa in produzione. Costruire quello che i video spiegano, invece di guardarli soltanto, colma quel divario più in fretta che aspettare l'arrivo dell'esperienza.
I contenuti di system design sono ovunque in questo momento, e la maggior parte presume che tu abbia già fatto girare qualcosa in produzione e l'abbia visto rompersi. Quell'esperienza è genuinamente utile. Non è però l'unico modo per entrare nell'argomento, e aspettare di averla prima di toccarlo significherebbe non iniziare mai.
Quindi costruisco i sistemi che i video spiegano, invece di limitarmi a guardarli.
Guardare da solo non insegna il system design
Posso guardare un video che spiega load balancer, caching, e scelte di database, e annuire per tutto il tempo. Non è la stessa cosa che capire perché una scelta specifica conta per un problema specifico.
L'URL shortener di cui ho scritto è nato direttamente da questo. Un video di system design ha percorso l'architettura, e invece di guardarlo soltanto, ho costruito la cosa: tre copie dell'app dietro un load balancer, un database scelto per il pattern di accesso, una cache aggiunta senza toccare il resto del codice.
Cosa mi ha insegnato costruirlo che guardarlo non insegnava
Guardando il video, "aggiungi una cache" suona come un unico passo ovvio. Costruendolo, ho dovuto decidere dove viveva la cache nel codice, cosa succedeva a un miss, e per quanto tempo una entry doveva sopravvivere prima di diventare stale.
Nessuna di quelle decisioni è nel diagramma. Compaiono solo quando scrivi il codice e ti scontri con le domande che il diagramma ha saltato, e sbagliarle una volta insegna più che sentirsele spiegare dieci volte.
I sistemi piccoli hanno le stesse forme
L'altra cosa che continuo a notare: i problemi non hanno bisogno della scala di produzione per essere reali. Due request che colpiscono la stessa riga sono un problema di concorrenza sia che il sistema abbia dieci utenti sia che ne abbia dieci milioni. Una query lenta è lenta a qualsiasi dimensione. Decidere che una cache e un database possono essere in disaccordo è la stessa decisione in entrambi i casi.
La scala cambia quanto costa un errore. Non cambia la forma dell'errore, che è la parte che vale la pena imparare per prima.
A che punto sono con questo
Non sto cercando di imparare tutti i pattern in una volta. Ogni progetto prende uno o due concetti nuovi, load balancing e caching questa volta, e lascia il resto per qualsiasi cosa costruirò dopo.
È più lento che affrontare un intero corso in un colpo solo, ed è l'unico approccio che ho trovato dove i concetti si attaccano invece di diventare vocabolario che riconosco senza capirlo davvero.