The future of computing is the cloud.

Meno architettura è meglio (finchè non fa male) 🏗️

Meno architettura è meglio (finchè non fa male) 🏗️

18 maggio 2025·Sandro Lain
Sandro Lain

Il fascino della complessità (e la dura realtà) 🧩

C’è una strana attrazione che ci spinge, appena mettiamo mano a un nuovo progetto, a sognare microservizi, orchestratori, pipeline CI/CD degne della NASA e deployment multi-cloud. Sarà la voglia di sentirsi parte dell’élite tech, o forse il desiderio di poter dire “sì, usiamo Kubernetes” durante l’aperitivo con gli amici. Ma la verità è che, nella maggior parte dei casi, tutta questa architettura serve quanto un ombrello nel deserto.

Quando la semplicità è una virtù (e non una colpa) 😇

Se il tuo team si conta sulle dita di una mano (e magari avanza pure qualche dito), il traffico è quello di un blog di poesia in esperanto e il prodotto deve ancora dimostrare di piacere a qualcuno che non sia tua madre… la semplicità è la tua migliore alleata. Un monolite ben fatto, magari scritto in GoLang o NodeJS, ti farà dormire sonni tranquilli e ti permetterà di cambiare idea ogni settimana senza dover riscrivere mezzo pianeta.

“Build simple until it hurts, then modularize.”

Non è solo uno slogan da maglietta, ma una filosofia di vita. La refattorizzazione arriverà comunque, perché i requisiti cambiano più spesso delle policy aziendali. Meglio investire tempo nel validare il prodotto che nel progettare la cattedrale di Notre-Dame… per poi scoprire che serviva solo una casetta di legno.

Debito tecnico vs complessità invisibile: il vero bilancio 🧾

Accettare un po’ di debito tecnico è spesso una scelta consapevole e strategica: permette di muoversi velocemente, validare il prodotto e investire solo quando serve davvero. Il debito tecnico, se monitorato, è come un mutuo: si ripaga quando (e se) il prodotto lo merita davvero. Meglio qualche “angolo da sistemare” che mesi spesi a costruire la perfezione per un mercato che potrebbe non esistere.

Ma attenzione: ogni strato architetturale aggiunto porta con sé un costo nascosto, spesso sottovalutato. La complessità invisibile si manifesta in onboarding più lento, debugging più difficile, silos di conoscenza e comunicazione confusa. Più la struttura cresce, più diventa difficile capire chi fa cosa e perché. In pratica, il debito tecnico si vede e si gestisce, la complessità invisibile si insinua silenziosa e rischia di soffocare il progetto senza che nessuno se ne accorga.

Il vero bilancio? Meglio un po’ di debito tecnico dichiarato che una complessità architetturale che nessuno osa più toccare.

Scalabilità e modelli enterprise: miti da sfatare 🦄🏢

La tentazione di progettare sistemi pronti a reggere il traffico di Google o Netflix è forte, così come quella di adottare soluzioni enterprise solo perché “lo fanno i grandi”. Ma la realtà è che la maggior parte dei progetti non raggiungerà mai quella scala, e i problemi (oltre ai budget) sono molto diversi.

Ottimizzare per casi estremi è spesso uno spreco di risorse e tempo: non serve una portaerei per attraversare il lago. Meglio risolvere i problemi reali di oggi, piuttosto che prepararsi a un’invasione di utenti che (spoiler) potrebbe non arrivare mai. Ogni soluzione va calibrata sul contesto reale, non su quello ideale: copiare i big senza averne le necessità rischia solo di complicare la vita e rallentare la crescita.

La sindrome dell’overdesign: paura, budget e altre storie di ordinaria follia 🦄

Perché cadiamo nella trappola della sovraingegnerizzazione? Semplice: la paura di dover rifare tutto dopo, o il timore che il budget sparisca come la pizza in una riunione di team. Ma la realtà è che ottimizzare troppo presto è come comprare un SUV per andare a prendere il pane sotto casa: costoso, ingombrante e, alla fine, inutile.

  • La refattorizzazione è inevitabile: i requisiti cambiano, le idee evolvono, il codice si trasforma.
  • L’overdesign rallenta la delivery e ritarda il feedback di mercato. Il rischio? Non arrivare mai a quel famoso “dopo”.

Meglio un MVP imperfetto ma reale, che una piattaforma perfetta… e immaginaria.

MVP: il trampolino, non il traguardo

Un aspetto spesso sottovalutato: quando il business preme per avere qualcosa di funzionante “subito”, la scelta più saggia è spesso quella di costruire un MVP o un POC il più semplice e rapido possibile. Ma attenzione: questa velocità iniziale è solo un trampolino. Se il prodotto prende piede e si vuole davvero portarlo sul mercato, il refactoring diventa una tappa obbligata. Nessun MVP nato in fretta è pronto per essere commercializzato senza una robusta fase di revisione e ristrutturazione.

La vera consapevolezza sta nel non illudersi che il prototipo possa diventare prodotto senza passare dal via (e dal refactoring!).

Feedback e refactoring: il ciclo virtuoso del cambiamento ⚡🔄

Architetture semplici permettono di ricevere feedback dagli utenti e dal mercato molto più velocemente. Più breve è il ciclo tra idea e rilascio, più possibilità hai di correggere la rotta prima di finire fuori strada. La semplicità accelera l’apprendimento e riduce il rischio di costruire qualcosa che nessuno vuole.

Ma il vero superpotere non è solo imparare in fretta, è anche saper cambiare strada senza drammi. Il refactoring non è un fallimento, ma un segno di maturità e adattamento: solo chi non fa nulla non cambia mai nulla. Essere pronti a rimettere mano al progetto quando serve, senza sensi di colpa, trasforma ogni feedback in un’opportunità di evoluzione. In fondo, il ciclo ideale è: rilascia, ascolta, migliora, ripeti.

Il framework “BUILD-PAIN-SCALE”: filosofia zen per architetti inquieti 🧘

Come capire quando è il momento di complicarsi la vita? Ecco un framework decisionale che non troverai nei manuali, ma che potrebbe salvarti da notti insonni:

1. BUILD – Costruisci semplice, valuta i bisogni reali 🏗️

  • Il prodotto ha raggiunto il product-market fit?
  • Il carico di utenti è davvero critico?
  • Il team è ancora sotto le 10 persone?
  • Si può gestire tutto in un unico repository?

Se la risposta è sì, resta semplice. Un monolite, qualche script di deploy e via.

2. PAIN – Stai avvertendo dolore reale? 😖

  • Le build o i deploy rallentano lo sviluppo?
  • Le release indipendenti sono bloccate?
  • Il traffico causa downtime?
  • I team si pestano i piedi sui domini?
  • Il rollback è un terno al lotto?

Se il dolore è concreto e frequente, forse è ora di modularizzare.

3. SCALE – C’è una reale esigenza di scalabilità o autonomia? 📈

  • Il traffico cresce più veloce delle bollette?
  • Serve alta disponibilità e self-healing?
  • Vuoi team autonomi e deploy continui?
  • Devi gestire multi-tenant o compliance?

Qui, e solo qui, microservizi, orchestratori e CI/CD avanzato hanno davvero senso.

Conclusione: semplice fino al dolore, poi modulare (ma con criterio) 🏁

La vera arte non è costruire castelli di sabbia architetturali, ma sapere quando è il momento di passare dal secchiello alla betoniera. Sii semplice, sii veloce, sii pronto a cambiare. E ricorda: la complessità è come il peperoncino, va usata con parsimonia… o rischi di rovinare tutto il piatto! 🌶️

Ultimo aggiornamento il