Adaptive Software Development
# Adaptive Software Development

È una metodologia agile ideata da Jim Highsmith, direttore del Cutter Consortium's Agile Project Management Advisory Service.

Questa metodologia è composta da un insieme di regole di sviluppo software inserite in un sistema complessivo detto Agile Project Management i cui concetti base sono tre:

* Leadership-Collaboration Management - Uno stile di gestione misto fra gerarchico e collaborativo;
* From Processes to Pattern - Passaggio dall'idea di processo definito e misurabile a quella di processo non perfettamente definito, quasi un processo fuzzy;
* Peering into the Future - Osservazione del futuro per capire come l'idea che produrrà un affare di successo debba essere legata al momento in cui diventerà una forma di business.

Jim Highsmith e Ken Orr affermano che Adaptive Software Development può funzionare solo ed esclusivamente se l'intero team è consapevole dell'importanza del lavoro di gruppo e spiegano come si discosti, ad esempio, da Extreme Programming su punti essenziali (cliente presente, Pair Programming, test automatizzati) concentrandosi sulla strategia della Leadership-Collaboration Management e sull'adattamento totale al progetto in lavorazione.

## Condizioni ottimali di utilizzo

Esistono tre situazioni esemplari che suggeriscono di utilizzare Agile Project Management:

* per progetti ad alto valore esplorativo (nel senso di sperimentazione);
* per progetti in cui il feedback del cliente è di capitale importanza;
* per organizzazioni che apportino innovazioni estreme.

## Le fasi del ciclo di vita

La formalizzazione di un sistema complessivo costruito intorno ad Adaptive Software Development porta a considerare Agile Project Management come un nuovo framework.

Le cinque fasi del ciclo di vita sono generalizzate per permettere di utilizzarle con qualunque metodologia agile:

* prevedere (definire una vision del prodotto finale, decidere chi farà cosa, scegliere come il gruppo di lavoro lavorerà insieme);
* ipotizzare (sviluppare una versione basata solo sulle caratteristiche, decidere delle milestones ed un interation plan);
* esaminare (cioè consegnare spesso versioni con nuove caratteristiche testate, e che il cliente testerà anche meglio con l'utilizzo);
* adattare (verificare i risultati delle versioni consegnate, ricontrollare l'ambiente reale di utilizzo, testare così le prestazioni del gruppo di lavoro; adattare e riadattare se necessario);
* chiudere (concludere il progetto, affrontare gli ultimi dettagli in sospeso e festeggiare).

## Principi base

* sviluppare qualcosa di utile;
* coltivare la fiducia degli stakeholders;
* utilizzare Leadership-Collaboration Management come stile gestionale;
* costituire gruppi di lavoro competenti e collaborativi;
* far sì che il team abbia la possibilità e sia in grado di prendere decisioni;
* consegnare spesso nuove versioni all'aggiunta di nuove funzionalità;
* incoraggiare l'adattabilità;
* cercare di ottenere l'eccellenza tecnica;
* quando possibile, aumentare il volume di dati immessi.
