Living Documentation, Spec-Driven Development e DDD

Nei team di sviluppo la documentazione è spesso percepita come un male necessario: qualcosa da produrre a valle del lavoro, sotto pressione, e proprio per questo destinata rapidamente a diventare obsoleta. Diagrammi che descrivono sistemi che non esistono più, documenti che nessuno legge, decisioni perse nella memoria dei singoli. Negli ultimi anni, però, l’adozione sempre […]

Specification-Driven Development: riprendere il controllo nell’era degli LLM

I Large Language Models sono ormai ampiamente utilizzati nello sviluppo software. Generano codice, test, documentazione e persino bozze architetturali. Il problema, però, non è la loro capacità. È la loro mancanza di contesto durabile. Anche quando vengono guidati da prompt ben scritti, gli LLM producono output spesso inconsistenti, imprevedibili e, soprattutto, subdolamente disallineati dall’intento del […]

La filosofia dell’architettura

L’idea che filosofia e architettura software possano essere collegate potrebbe sembrare un po’ stramba. Tuttavia, qualche mese fa ho avuto l’opportunità di partecipare a un corso sull’architettura del software veramente rivoluzionario, che mi ha aperto un nuovo mondo, e un nuovo modo di esplorare il software come supporto ai processi umani. Nei precedenti articoli abbiamo […]

Don’t Share Your Domain Events!

Progettare per l’evoluzione Il primo passo per poter progettare un’architettura evolutiva è disegnare il nostro software in modo che possa evolvere facilmente. Già, facile a dirsi, non proprio facile a farsi. Cosa significa disegnare un sistema che possa evolvere facilmente con le continue richieste del Cliente? Proviamo a partire dal classico codice legacy. Spesso sento associare il […]

Fitness function-driven development – Prima Parte

Una delle principali attività a carico di un software architect è la creazione di una architettura che possa evolvere con le esigenze del Cliente. Il nostro software, una volta rilasciato, è destinato ad evolvere continuamente, ad adeguarsi alle esigenze dei nostri Clienti, alle continue richieste di nuove funzionalità inizialmente non previste, ma deve anche garantire […]

Problem Space vs Solution Space

Capire i problemi e/o trovare le soluzioni Tra le tante frasi attribuite in modo apocrifo ad Albert Einstein, c’è quella che dice: “Se avessi a disposizione un’ora per salvare il mondo, utilizzerei 55 minuti per definire il problema e solo 5 minuti per trovare le soluzioni”. Volendo “tradurre” in poche parole questa affermazione, potremmo dire […]

DDD, microservizi e architetture evolutive: uno sguardo d’insieme

Oltre la scrittura di codice Sviluppare software, di per sé, non è complicato. O meglio… dipende! Se con il termine sviluppare ci limitiamo all’azione di scrivere codice, allora l’affermazione è corretta. Per scrivere del buon codice, oltre che imparare un linguaggio e tutte le best practice per applicare le sue regole, mi basta leggere qualche buon libro sul Clean Code e […]

Si fa presto a dire Coupling

Definiamo l’accoppiamento software come il numero di connessioni inter-modulo nei sistemi software, ed è spesso considerato la chiave di lettura per identificare la difficoltà nel mantenere, scalare, e spesso anche migliorare, l’applicativo stesso. Più l’accoppiamento è elevato, maggiore sarà il costo necessario per implementare nuove funzioanlità, perchè il rischio di rompere ciò che già esiste […]

DDD nel mondo dei Dati

Ma come? Ho sempre detto che DDD ha nei suoi principi base il modo di affrontare il problema partendo dalle esigenze del business, ed ora mi ritrovo a scrivere che DDD si occupa di come raccogliere dati? Parlando di architetture moderne uno dei pattern strategici chiave del DDD, il Bounded Context, è da sempre legato […]

MQTT vs AMQP

Non c’è ombra di dubbio che parlando di protocolli per lo scambio di messaggi fra applicazioni ci si imabatta a confrontarsi con questi due signori. Allora, perchè non cercare di capire che differenze ci sono fra due protocolli apparentemente molto simili? MQTT è stato progettato per l’Internet of Things (IoT), argomento a me molto caro. […]

Containers vs WebAssembly:

Che la sfida abbia inizio Non c’è ombra di dubbio sul fatto che i container Docker abbiano dominato la scena sul fronte cloud negli ultimi anni. Ora però, un’altra tecnologia si sta facendo largo ed è giunto il momento di capire se l’una può sostituire l’altra. Ma andiamo con ordine. Piccolo ripasso: cosa sono i […]

WebAssembly

WebAssembly, meglio conosciuto come Wasm, è certamente uno degli argomenti cool di noi dev ultimamante. Ma esattamente, di cosa si tratta? La prima definizione, e forse la più semplice, arriva direttamente dal consorzio W3C, ossia possiamo pensare a WebAssembly come un formato bytecode standardizzato per l’esecuzione di programmi. Magari indaghiamo un pò più a fondo. […]