sviluppo professionale di soluzioni software guidate dai modelli, dal dominio e dalle architetture

Model-Driven Software Engineering

Ciò che metto a disposizione dei miei clienti è l'esperienza abbinata al continuo aggiornamento nella progettazione del software utilizzando metodologie orientate agli oggetti, una modellazione basata su UML e tecniche di testabilità. Il mio approccio è guidato dai modelli (model-driven), dal dominio applicativo (domain-driven) e dalle architetture (architecture-driven). Il progetto e il progettista, anziché lo strumento, sono al centro dello sviluppo.

Perchè "model-driven"? Perchè "engineering"?

Lo sviluppo del software è in parte arte, in parte ingegneria. Un approccio professionale deve abbinare alla creatività individuale un framework tecnico di comprovata efficacia. Senza principi ingegneristici rigorosi lo sviluppo rimane hobbistico, ad hoc, improvvisato. L'ingegnerizzazione non deve però portare necessariamente a soluzioni preconfezionate, bensì deve essere un supporto affidabile per tenere maggiormente sotto controllo sistemi software complessi che evolvono nel tempo. Tale complessità non risulta "economicamente ed intellettualmente trattabile" senza un modello sintetico che esprima solo le proprietà essenziali del design, piuttosto che nasconderle tra mille dettagli implementativi. 

perchè domain-driven?

Il vero investimento per un'organizzazione non risiede nella tecnologia o negli strumenti, bensì nel consolidamento della proprietà intellettuale legata al dominio applicativo in cui essa opera. In particolare nel mondo del software, tecnologie e strumenti cambiano rapidamente e spesso in risposta a fattori estranei all'organizzazione (mode, marketing, interessi commerciali dei tool vendor, ecc.). I cambiamenti che invece l'azienda deve allineare col software sono quelli legati al proprio modo unico di condurre il business all'interno del dominio applicativo (nuove politiche, strategie, business rules, innovazione, etc.).

perchè architecture-driven?

L'architettura è la struttura portante di ogni costruzione e ciò vale anche per le strutture intangibili come il software. Costruire sistemi guidati dall'architettura significa predisporre delle fondamenta sufficientemente robuste da "assorbire" i continui cambiamenti a cui un moderno sistema è soggetto, piuttosto che inseguire ogni nuova funzionalità, deteriorando progressivamente  l'ossatura iniziale. Significa anche riconoscere che il costo complessivo di un progetto di medio-grandi dimensioni tende a spostarsi dalla mera realizzazione iniziale all'evoluzione e manutenzione.