Categoria

Pagina 1 di 4

Architettura Software: scelte che reggono la crescita

Fare architettura vuol dire prendere bene le poche decisioni che saranno costose da cambiare. Gran parte del valore sta nel rifiutare la complessità che non serve. In questa categoria raccolgo il modo di ragionare sulle scelte strutturali applicato alla realtà delle aziende, dove il budget è finito e ogni decisione ha un conto.

Molto spazio va alle decisioni che pesano. Deep modules con interfacce semplici e implementazioni profonde, service layer e repository dove aggiungono valore, DDD e bounded context quando il dominio è abbastanza ricco da giustificarli, Event Sourcing e CQRS nei rari casi in cui servono davvero. In tutti questi casi cerco di distinguere il pattern che risolve un problema reale da quello adottato per sembrare moderni.

Poi c'è la disciplina del no. Torno spesso su quando i microservizi sono la scelta sbagliata: spezzare un monolite che funziona costa quasi sempre più di quanto rende, e la migrazione, quando ha senso, si fa in modo incrementale con pattern come lo Strangler Fig. Vale lo stesso per il vendor lock-in, che resta una decisione architetturale anche quando sembra una scelta di comodo.

E l'architettura nell'era dell'AI: codebase pensate per essere leggibili dagli umani (e proprio per questo anche dagli assistenti), la sostituibilità del modello progettata a monte con abstraction layer e fallback, i nuovi protocolli fra agenti e servizi. Sono decisioni nuove, ma la logica con cui si prendono è la stessa di sempre.

Se hai una decisione architetturale importante da prendere, vedi la panoramica dei servizi o i miei progetti PHP senior.

La miglior architettura rende facili i cambiamenti probabili e possibili quelli improbabili. Il resto è over-engineering.

React per il frontend dei gestionali Laravel: SPA senza perdere il controllo del backend

React per il frontend dei gestionali Laravel: SPA senza perdere il controllo del backend Un gestionale complesso a volte chiede un frontend React, ma la SPA porta con sé costi che non tutti i progetti giustificano. Quando React ha senso su un backend Laravel e quando Livewire o Inertia bastano e avanzano: i confini dell'API, la gestione dello stato senza duplicare la logica di business, e i punti dove la SPA aggiunge complessità più che valore. Decisione di architettura frontend motivata dal caso reale, non dall'hype. Continua a leggere
Ultima modifica:

Node.js e TypeScript per microservizi: quando PHP non basta

Node.js e TypeScript per microservizi: quando PHP non basta Il monolite PHP regge la maggior parte dei casi, ma per alcuni carichi un microservizio in Node.js e TypeScript è la scelta tecnica corretta: real-time, connessioni persistenti, I/O intensivo concorrente. Quando estrarre un servizio ha senso e quando frammenta l'architettura senza guadagno, i confini da rispettare, e come far convivere i due mondi senza duplicare logica. Decisione di architettura motivata, non moda dei microservizi. Continua a leggere
Ultima modifica:

Python come alleato del backend PHP: automatizzare i task complessi

Python come alleato del backend PHP: automatizzare i task complessi Non tutto si risolve nel framework PHP, e a volte la risposta giusta è affiancare Python invece di forzare lo stack. Dove Python ha l'ecosistema migliore: automazione, data processing, scripting di integrazione, task con librerie scientifiche o di scraping. Come farlo convivere con un backend PHP senza riscrivere l'applicazione, con i confini netti tra i due e i pattern di comunicazione affidabili. Pragmatismo multi-stack, non religione di linguaggio. Continua a leggere
Ultima modifica:

Principi SOLID applicati a Laravel: refactoring da controller a service layer

Principi SOLID applicati a Laravel: refactoring da controller a service layer I controller gonfi sono il debito tecnico più comune in Laravel, ma la cura non è astrarre tutto. Come applicare i principi SOLID in modo pragmatico: spostare la logica di business in un service layer, dove la separazione paga davvero e dove invece aggiunge solo indirezione. Refactoring concreto da un controller reale, con i tradeoff dichiarati: la testabilità che guadagni contro la complessità che introduci. Continua a leggere
Ultima modifica:

SSO opzionale con Zitadel: OIDC su un prodotto che gira anche standalone

SSO opzionale con Zitadel: OIDC su un prodotto che gira anche standalone Aggiungere il single sign-on a un prodotto che gira anche presso clienti senza identity provider non è mettere un flag: è progettare due forme del prodotto che convivono nello stesso codice. E siccome il flusso coinvolge due applicazioni, la modalità effettiva non è una configurazione ma un'intersezione, che va scoperta invece che assunta. Il pattern della negoziazione, il degrado direzionale, la macchina a cinque stati e come si collauda un prodotto che le ha tutte. Continua a leggere
Ultima modifica:

Da ACL di directory a filtraggio applicativo: SSO con Zitadel senza perdere il recinto

Da ACL di directory a filtraggio applicativo: SSO con Zitadel senza perdere il recinto C'è un momento, in ogni migrazione verso il single sign-on, in cui l'applicazione smette di avere la password dell'utente. Sembra un progresso e lo è, ma se quella password serviva anche ad accedere ai dati, in quell'istante hai silenziosamente rimosso il controllo di accesso e nessun test se ne accorge. Come ho ricostruito il recinto a livello applicativo, perché un solo livello non basta, come si enumera davvero la superficie da proteggere, e il buco cross-tenant che l'audit ha trovato. Continua a leggere
Ultima modifica:

Laravel AI SDK: feature AI provider-agnostic, e perché ora è risk-mitigation non comodità

Laravel AI SDK: feature AI provider-agnostic, e perché ora è risk-mitigation non comodità Il AI SDK first-party di Laravel porta text generation, tool-calling ed embeddings con uno switch di provider gestito da config. Fino a ieri lo si vendeva come comodità; dopo la sospensione di Fable 5 del 12 giugno 2026 è risk-mitigation: chi ha l'abstraction layer agnostico fa fallback in una riga quando un modello viene spento dall'alto, chi è cablato si ferma. Esempio concreto con un provider primario e un fallback, e cosa serve perché lo switch sia davvero indolore. Continua a leggere
Ultima modifica:

Progettare la sostituibilità del modello AI: abstraction layer, eval di portabilità, fallback self-hosted

Progettare la sostituibilità del modello AI: abstraction layer, eval di portabilità, fallback self-hosted Dopo la sospensione di Fable 5 del 12 giugno 2026, la domanda per chi sviluppa con l'AI non è più solo "quale modello" ma "cosa succede quando il modello sparisce". La risposta è architetturale: un abstraction layer provider-agnostic (Laravel AI SDK, LiteLLM), eval di portabilità che misurano la regressione cambiando modello, un fallback multi-provider o self-hosted, e un exit plan documentato. Non significa non usare i frontier model: significa progettarne la sostituibilità prima che serva. Continua a leggere
Ultima modifica:

Weaviate 1.30 multi-vector ColBERT in production: setup per RAG tecnico specialistico

Weaviate 1.30 multi-vector ColBERT in production: setup per RAG tecnico specialistico Per un RAG su dominio tecnico specialistico (vocabolario italiano, sigle proprietarie, convenzioni di settore), un dense bi-encoder single-vector generalista sbaglia spesso. Weaviate 1.30 porta multi-vector ColBERT in GA e 1.31 aggiunge MUVERA per ridurre il footprint. Setup completo: ingestion pipeline, configurazione schema Weaviate, retrieval con late interaction, benchmark accuracy su dataset tecnico italiano della mia sandbox. Continua a leggere
Ultima modifica:

Dentro un Transformer: attention, MLP e residual stream spiegati per chi integra LLM in produzione

Dentro un Transformer: attention, MLP e residual stream spiegati per chi integra LLM in produzione GPT-4 ha ~1.800 miliardi di parametri; il modello legge il prompt in quattro componenti: embedding lookup, multi-head self-attention, MLP, unembedding+softmax. L'attention fa parlare i token fra loro, l'MLP inietta fatti, il residual stream è un nastro che trasporta i vettori ricorsivamente per decine di transformer block. Capire questo rende prevedibili allucinazioni, dipendenza dal prompt, sensibilità all'ordine. Continua a leggere
Ultima modifica:

Strumenti utili per l'architettura

Tool gratuiti per modellare e documentare:

JSON formatter, Genera tipi da JSON, Convertitore YAML/JSON/TOML.