Case study

Esperienze reali, raccontate per intero.

Per ogni collaborazione: il contesto, la sfida tecnica, cosa ho costruito, la formazione portata nel team e le decisioni di architettura più importanti.

Caso 01ott 2025 — oggi

Un nuovo microservizio PHP per il mondo della scuola

Senior Software Engineer · Madisoft · EdTech · Remoto

Contesto

Madisoft realizza software per il mondo della scuola. Il mio ruolo è progettare e sviluppare un nuovo microservizio PHP robusto ed evolvibile, contribuendo alla definizione dell'architettura e delle linee guida tecniche.

Sfida

  • Introdurre un nuovo microservizio nello stack esistente senza interrompere l'evoluzione del prodotto.
  • Definire confini di contesto chiari su un dominio ricco come quello della scuola digitale.
  • Diffondere nel team pratiche di qualità del codice e test automatici come abitudine, non come fase finale.

Soluzione

  • Progettazione e implementazione del nuovo microservizio applicando DDD, architettura esagonale e CQRS + Event Sourcing.
  • Modernizzazione progressiva del codice esistente con strategia a piccoli passi, sempre in produzione.
  • Contributo attivo alle linee guida tecniche e alle code review trasversali ai team.

Formazione

  • Promozione di TDD e clean code nel ciclo di sviluppo quotidiano.
  • Supporto al team su design pattern e architettura applicativa.

Architettura

PHP, Symfony, PostgreSQL, DDD, architettura esagonale e CQRS + Event Sourcing.

  • PHP
  • Symfony
  • PostgreSQL
  • DDD
  • CQRS+ES
  • Architettura esagonale

Decisioni

Architettura esagonale come default

Domini isolati dal mondo esterno tramite porte e adapter: cambiare provider, database o framework non costringe a riscrivere la logica di business.

CQRS ed Event Sourcing dove portano valore

Separare scrittura e lettura e conservare la storia degli eventi rende esplicita l'evoluzione del dominio senza confondere responsabilità diverse.

Caso 02gen 2007 — oggi

Consulenza autonoma su architettura software e qualità del codice

Senior Backend Engineer & Software Architect (Autonomo) · matteogalacci.it · Libero professionista · Cervia

Contesto

Dal 2007 lavoro come libero professionista affiancando aziende che vogliono migliorare architettura e qualità del codice, rendendo il software più manutenibile ed evolvibile e riducendo tempi e costi di evoluzione nel lungo periodo. È il filo conduttore che attraversa tutte le altre collaborazioni: lo stesso approccio, declinato su contesti diversi.

Sfida

  • Codice legacy difficile da evolvere, spesso senza test e con responsabilità mescolate.
  • Team che hanno bisogno di pratiche condivise prima ancora che di nuove tecnologie.
  • Decisioni di architettura che devono reggere nel tempo, non solo nella prossima release.

Soluzione

  • Analisi della codebase e proposte di refactoring incrementale, senza riscritture big-bang.
  • Introduzione graduale di DDD, architettura esagonale, CQRS+ES dove portano valore reale.
  • Formazione on the job: code review, pair programming, sessioni mirate sui pattern adottati.
  • Uso responsabile di strumenti AI a supporto di analisi e verifica, con revisione umana, per ridurre i tempi e dedicare più attenzione alla qualità del software e all'esperienza di chi lo usa.

Formazione

  • Workshop su TDD, clean code, design pattern e architettura applicativa.
  • Affiancamento ai tech lead interni per rendere il team autonomo dopo la consulenza.

Architettura

Stack principalmente PHP / Symfony, MySQL/MariaDB/PostgreSQL, AWS, Docker, architettura esagonale, DDD, CQRS+ES.

  • PHP
  • Symfony
  • MySQL
  • MariaDB
  • PostgreSQL
  • AWS
  • Docker
  • DDD
  • CQRS+ES

Decisioni

Continuità di metodo

Le stesse pratiche — test, clean code, bounded context — applicate in ogni collaborazione: è ciò che permette al lavoro di durare oltre il singolo progetto.

Trasferire, non sostituire

L'obiettivo non è restare indispensabile, ma lasciare team in grado di portare avanti l'architettura in autonomia.

Caso 03apr 2022 — set 2025

Da monoliti PHP a microservizi DDD per un network di compravendita

Senior Backend Engineer & Software Architect · Abilio S.p.A. · Attività finanziarie · Faenza

Contesto

Abilio è un network che connette persone, aziende e istituzioni in un percorso di compravendita sicuro e trasparente. Sono entrato come prosecuzione del lavoro iniziato con Studio Neprix, con l'obiettivo di far crescere il team tecnico e modernizzare lo stack applicativo.

Sfida

  • Stack legacy composto da monoliti PHP difficili da evolvere e da testare.
  • Team in crescita, con livelli di seniority eterogenei e nessuna baseline architetturale condivisa.
  • Necessità di consegnare nuovi prodotti mantenendo in vita quelli esistenti.

Soluzione

  • Migrazione progressiva verso un'architettura a microservizi basata su DDD.
  • Definizione di una baseline architetturale: architettura esagonale, CQRS+ES, contratti chiari tra servizi.
  • Collaborazione attiva alla migrazione del codice e alla scrittura dei nuovi progetti.

Formazione

  • Formazione interna su TDD e test automatici come parte del design.
  • Sessioni su clean code, design pattern, architettura esagonale, DDD, CQRS+ES.

Architettura

PHP / Symfony, REST API, event-driven su AWS (SQS, SNS), MySQL, Docker, architettura esagonale, CQRS + Event Sourcing.

  • PHP
  • Symfony
  • MySQL
  • AWS SQS/SNS
  • Docker
  • DDD
  • CQRS+ES
  • TDD

Decisioni

Strangler pattern, non rewrite

I monoliti continuano a servire il traffico finché i microservizi corrispondenti non sono pronti e collaudati. Migrazione reversibile, senza big-bang.

Formazione come parte del lavoro

Le linee guida non bastano: serve un team che le capisca e le porti avanti in autonomia. Per questo metà del valore è nelle sessioni di formazione e nelle code review.

Caso 04ott 2020 — apr 2022

Tech lead nella modernizzazione di una piattaforma di gestione asset

Senior Backend Developer & Tech Lead · Neprix · Gestione asset e crediti

Contesto

Neprix è un gestore di asset e aziende in difficoltà, non solo di crediti. Sono arrivato come prosecuzione del lavoro fatto con Studio Mado, con il duplice obiettivo di far crescere il team tecnico e migrare lo stack legacy.

Sfida

  • Monoliti PHP con responsabilità mescolate e tempi di rilascio lunghi.
  • Team tecnico in costruzione, con bisogno di una guida sulle pratiche di qualità.
  • Domini di business complessi da modellare e separare con cura.

Soluzione

  • Disegno e implementazione di nuovi microservizi event-driven con DDD.
  • Estrazione progressiva di bounded context dal monolite esistente.
  • Code review e pair programming come strumento di trasmissione delle pratiche.

Formazione

  • Formazione interna su test automatici (TDD), clean code e architettura software.
  • Workshop su design pattern, architettura esagonale, DDD e CQRS+ES.

Architettura

PHP, Symfony, REST API, MySQL, eventi via AWS SQS/SNS, Docker, architettura esagonale, CQRS + Event Sourcing.

  • PHP
  • Symfony
  • MySQL
  • AWS SQS/SNS
  • Docker
  • DDD
  • CQRS+ES

Decisioni

Bounded context prima, codice dopo

Le sessioni di event storming hanno preceduto la scrittura dei microservizi: separare bene i contesti vale più di qualunque ottimizzazione tecnica.

Event sourcing dove serve davvero

Adottato sui domini in cui l'audit completo della storia è un valore di business, non come scelta uniforme per tutti i servizi.

Caso 05apr 2019 — ott 2020

Punto di partenza del percorso di modernizzazione poi proseguito in Neprix e Abilio

Senior Backend Developer & Tech Lead · Studio Mado · Software · Faenza

Contesto

Studio Mado è la realtà da cui è partito il percorso continuato poi con Neprix e Abilio. L'obiettivo era far crescere il team tecnico e iniziare a migrare lo stack legacy verso un approccio a microservizi basato su DDD.

Sfida

  • Codebase monolitica PHP consolidata negli anni.
  • Team da accompagnare verso pratiche di qualità e test automatici.
  • Necessità di sperimentare l'architettura a microservizi su casi reali, non in laboratorio.

Soluzione

  • Migrazione del codice e scrittura di nuovi progetti con un'architettura a microservizi event-driven.
  • Adozione di pattern condivisi (esagonale, CQRS+ES) per dare coerenza ai servizi.
  • Standardizzazione degli ambienti di sviluppo con Docker.

Formazione

  • Formazione interna su TDD, clean code e architettura software.
  • Workshop su design pattern e architettura esagonale.

Architettura

PHP, Symfony, REST API, microservizi, CQRS+ES, MySQL, AWS (SQS, SNS), Docker, architettura esagonale.

  • PHP
  • Symfony
  • MySQL
  • AWS SQS/SNS
  • Docker
  • DDD
  • CQRS+ES
  • TDD

Decisioni

Cominciare da un servizio reale

Il primo microservizio è nato su un dominio in produzione: imparare facendo, con feedback immediato dal business.

Pratiche condivise > tool

Più importante che il team adottasse le stesse pratiche di test e refactoring rispetto alla scelta di un framework o di un cloud specifico.

Caso 06nov 2017 — mag 2020

API REST per importazione e consultazione di cataloghi prodotto

Senior Backend Software Engineer · IdroLAB S.r.l. · Idrotermosanitario · Rimini

Contesto

Sviluppo back-end e infrastruttura di un'API REST il cui scopo era gestire l'importazione e la successiva consultazione di cataloghi di materiale idrotermosanitario, con volumi importanti di dati e fornitori eterogenei.

Sfida

  • Cataloghi forniti in formati diversi, con qualità del dato variabile.
  • Performance richieste sia in scrittura (importazioni massive) sia in lettura (ricerca prodotti).
  • Necessità di un modello di dominio chiaro per gestire varianti, attributi e classificazioni.

Soluzione

  • Modellazione del dominio con DDD per separare importazione e consultazione.
  • API REST con contratti stabili e versionamento esplicito.
  • Pipeline di importazione testate con TDD per garantire qualità del dato.

Architettura

PHP, Symfony, REST API, MySQL, Debian, Docker, DDD, design pattern, TDD.

  • PHP
  • Symfony
  • MySQL
  • Debian
  • Docker
  • DDD
  • TDD

Decisioni

Separare ingest e lettura

Due percorsi distinti per importazione (scrittura intensiva, modello ricco) e consultazione (lettura veloce, modello ottimizzato): meno compromessi, più chiarezza.

Test sulle pipeline di import

Le importazioni massive sono il punto in cui i bug fanno più danno: TDD su quei percorsi ha ripagato a ogni nuovo fornitore.

Caso 07mar 2014 — feb 2020

Sei anni a fianco di una web agency, sugli strumenti del settore alberghiero

Senior Backend Software Engineer · Adrias Online · Web agency · Rimini

Contesto

Ho affiancato per sei anni la web agency Adrias Online di Rimini, realizzando i principali strumenti informatici per la gestione del loro parco hotel: CMS custom, sistemi di analisi dei dati e client di posta orientati al mondo alberghiero.

Sfida

  • Esigenze molto diverse tra strutture hotel di dimensioni e brand differenti.
  • Strumenti interni che dovevano restare utilizzabili dal team operativo, non solo dai tecnici.
  • Integrazioni con servizi terzi (booking, mail, analytics).

Soluzione

  • CMS custom pensati per l'ambito hotel, con un nucleo riusabile tra clienti.
  • Sistemi di analisi dati per supportare le scelte commerciali delle strutture.
  • Client di posta elettronica orientati alle esigenze degli hotel.

Architettura

PHP, Go, REST API, Symfony, MySQL, Debian, Docker, DDD, design pattern, TDD, Git.

  • PHP
  • Go
  • Symfony
  • MySQL
  • Debian
  • Docker

Decisioni

Nucleo riusabile, personalizzazioni isolate

Le funzionalità trasversali vivono in un core comune; le esigenze specifiche di un cliente restano confinate in moduli dedicati, senza inquinare la base.

Vuoi capire se un approccio simile può funzionare anche per il tuo prodotto? Parliamone, senza impegno.

Scrivimi