La nostra massima priorità è soddisfare il cliente rilasciando software di valore, fin da subito e in maniera continua.

Questo è il primo punto del manifesto, il più importante, e come si può vedere il cliente è al centro del agile, e si parla di pubblicazione continua e di valore in quello che si pubblica. Ovvero che il cliente deve percepire il valore ogni volta che si pubblica il software e questo deve essere fatto fin dai primi momenti del progetto.

Accogliamo i cambiamenti nei requisiti, anche a stadi avanzati dello sviluppo.

Agile si basa su un detto di Charles Darwin: “Non è la razza più intelligente che sopravvive, neanche la più forte, ma la che sa adattarsi più velocemente!”

L’essere capaci ad adattarsi al cambio a un costo ridotto è la forza di questa metodologia, perché si basa sul fatto che un prodotto software evolve nel tempo e si deve plasmare ai bisogni in costante cambiamento degli utenti che sono influenzati da un mondo che avanza molto velocemente senza aspettare nessuno.

I processi agili sfruttano il cambiamento a favore del vantaggio competitivo del cliente.

Essere molto flessibili vuol dire dare la possibilità al cliente di essere più competitivo sul mercato potendo usare un tool che si adatta alle nuove esigenze. Proprio per questo in Agile la possibilità di potersi adattare velocemente è quello che lo rende forte e lo rende molto appetibile agli occhi del cliente.

Consegniamo frequentemente software funzionante, con cadenza variabile da un paio di settimane a un paio di mesi, preferendo i periodi brevi.

Direi che qua un paio di settimane è già troppo, personalmente preferirei cicli settimanali per minimizzare il rischio e far si che il team sia obbligato creare task di dimensioni ridotte, che siano più gestibili e misurabili.

Committenti e sviluppatori devono lavorare insieme quotidianamente per tutta la durata del progetto.

La interazione tra clienti e sviluppatori deve essere consolidata e senza barriere, questo evita che si lavori per una funzionalità che non è richiesta o che si trascurino cose che per il cliente sono importanti.

La visione del prodotto dal punto di vista dei programmatori normalmente è sostanzialmente diversa da quella del cliente, e per questo il team deve sempre fare riferimento al cliente alla ora di prendere decisioni sulle funzionalità e sull’usabilità del prodotto.

Fondiamo i progetti su individui motivati. Diamo loro l’ambiente e il supporto di cui hanno bisogno e confidiamo nella loro capacità di portare il lavoro a termine.

Un team motivato e con i giusti strumenti di lavoro è quello che ogni impresa software dovrebbe avere per riuscire a essere competitiva. Ho visto che in molte imprese la parte motivazionale viene trascurata, perché si assume che lo stipendio che si paga a fine mese è la fonte di motivazione del team. Tragicamente lo stipendio è solo una parte e bisogna curare anche la crescita personale del singolo, le possibilità di carriera e fare un seguimento personale per ogni programmatore per ascoltare le esigenze e suggerimenti per implementare un ambiente di miglioramento continuo.

Una conversazione faccia a faccia è il modo più efficiente e più efficace per comunicare con il team ed all’interno del team.

Un meeting presenziale ha molti vantaggi, tra cui la possibilità di mettere in luce problemi o impedimenti che si possono avere durante la fase di sviluppo. Aiuta molto le sinergie tra il team e fa si che si possa trarre vantaggio dal bagaglio di conoscenza di tutto il team e non solo del singolo individuo.

Il software funzionante è il principale metro di misura di progresso. I processi agili promuovono uno sviluppo sostenibile.

Senza software funzionante non si può misurare il progresso del progetto, perché il cliente non può darci una opinione sulle nostre classi e librerie ma ha bisogno di qualcosa che può toccare, provare e testare. Quindi se non abbiamo codice che può essere pubblicato non abbiamo niente e questo significa che il team non ha fatto progressi valorabili.

Gli sponsor, gli sviluppatori e gli utenti dovrebbero essere in grado di mantenere indefinitamente un ritmo costante.

Se si può vedere il prodotto finito come la somma degli sforzi di tutti i componenti del team si può capire velocemente che se uno degli attori partecipanti non è il grado di mantenere il ritmo degli altri allora rallenta tutto il processo di sviluppo. Per quello che è importante definire un ritmo e mantenerlo costante nel tempo del progetto, di modo che tutti si possano uniformare a questo e avere chiaro che se non corrono con tutti gli altri allora compromettono il risultato finale.

La continua attenzione all’eccellenza tecnica e alla buona progettazione esaltano l’agilità.

Essere agili vuol dire potersi adattare, e se la progettazione ha dei non è basata su dei principi stringenti di qualità, probabilmente avrà dei problemi in crescere o adattarsi al cambiamento. Proprio per questo il team deve tener bene in conto che la qualità tecnica della soluzione non deve mai scendere a compromessi.

La semplicità – l’arte di massimizzare la quantità di lavoro non svolto – è essenziale.

Semplificare significa eliminare le cosa inutili, per esempio se riusciamo a evitare di fare qualcosa che non è utile al nostro cliente allora è tutto tempo che guadagniamo. Per questo agile vuole che questo quantità di lavoro non svolto sia massimizzata perché di conseguenza è tutto tempo che il team ha avanzato e può dedicare alle cose importanti.

Le architetture, i requisiti e la progettazione migliori emergono da team che si auto-organizzano.

Agile si basa sul concetto che il team ha le conoscenze tecniche necessarie per fare i migliori progetti, anche perché da duna buona progettazione deriva poi una implementazione più facile e una adattabilità superiore.

Il team deve essere flessibile e proprio per questo è nel suo interesse disegnare la architettura del sistema nel miglior modo possibile perché poi tutto il resto venga di conseguenza.

A intervalli regolari il team riflette su come diventare più efficace, dopodiché regola e adatta il proprio comportamento di conseguenza.

La efficacia del team è una mattonella chiave del agile e proprio per questo è importante che si investa tempo in questo processo di miglioramento che poi avrà dei notevoli vantaggi nel lungo termine.