Difficile trovare le parole giuste per scrivere una degna recensione al libro Ship it! A Practical Guide to Successful Software Projects. Ship it! è veramente un libro eccellente, una delle pubblicazioni di maggiore livello per quanto riguarda la corretta gestione dei progetti software. Ship it! non è solo una raccolta di linee guida, suggerimenti e consigli su come organizzare in modo efficiente lo sviluppo di un software, è un libro in grado di aprirvi la mente con esempi e suggerimenti talmente comprensibili che, lo scommetto, più di una volta vi capiterà di esclamare “ma cavolo, perché non ci ho pensato prima, è fantastico!”.
La pubblicazione di Ship it! risale al 2005 ma il contenuto di questo libro è tutt’altro che datato. Rileggendo con attenzione ed occhio critico i suoi capitoli, confrontandoli con le realtà software che ho avuto modo di incontrare mi sono reso conto che meno della metà delle aziende di sviluppo adottano anche solo la metà dei consigli e delle best practice indicate per la creazione di un software: unit test, gestione dei sorgenti, continuous integrations, issue tracking, code review, code change notification, automatic builds… questi sono solo alcuni dei concetti fondamentali affrontati, discussi ed approfonditi dal libro.
Introduzione
L’introduzione è, da sola, una delle migliori che abbia mai avuto modo di leggere. Concisa, efficace e soprattutto incredibilmente profonda. Vi consiglio di non perdere neppure una pagina di questo libro, prefazione compresa scritta da Andy Hunt.
Nell’introduzione vengono da subito chiariti quelli che saranno gli argomenti essenziali trattati nel libro
- Techniques (tecniche)
- Infrastructure (infrastrutture)
- Process (processi)
Ciascuno di questi elementi è poi ripreso ed approfondito in un capitolo dedicato.
Sviluppatori, tester, team leader o project manager: non importa quale sia il vostro ruolo all’interno dello sviluppo di un software, questo libro è orientato ad ognuna delle quattro figure indicate. Ogni capitolo permette la lettura sotto diversi punti di vista e non c’è argomento che, alla fine, non possa influenzare il vostro modo di lavorare.
Per tutta la durata del libro, di tanto in tanto, una frase essenziale o un’affermazione chiave viene evidenziata come TIP. L’appendice A, dal titolo Tip Summary, è un riepilogo dei 42 suggerimenti chiave per una corretta gestione di un progetto software.
Dopo l’introduzione, il libro si sviluppa in 4 capitoli:
- Tools and Infrastructure
- Pragmatic Project Techniques
- Tracer Bullet Development
- Common Problems and How to Fix Them
Tools and Infrastructure
Questo capitolo analizza e descrive una corretta architettura per lo sviluppo di software.
L’apertura è dedicata all’analisi di come gli strumenti di Source Code Management (SCM), come ad esempio Subversion, sono tanto essenziali quanto indispensabili per qualsiasi progetto software, ma non solo! Possono infatti essere utilizzati in tantissimi ambiti come quello editoriale per tenere traccia dell’evoluzione di un libro e collegare l’attività di un autore a quella di un editore.
Altro tema affrontato è quello della compilazione automatica di un progetto. In alcuni casi si tratta di una vera e propria compilazione in binario, come per un eseguibile, in altri casi la compilazione è semplicemente la creazione di un pacchetto distribuibile come i file GEM in Ruby.
Indipendentemente dalla situazione, Ship it! suggerisce una ricca lista di accorgimenti per rendere quest’operazione indolore. Interessante la discussione sull’argomento Continuous Integration, con tanto di strumenti ed esempi.
Non manca una sezione dedicata al tema degli Issue Tracker, con utilissimi suggerimenti per non vanificare le potenzialità dello strumento, indipendentemente da quale si tratti. Non dobbiamo infatti dimenticare che anche lo strumenti migliore, nelle mani di un incapace, può trasformarsi in un’arma letale.
Eccezionale la panoramica sull’argomento Testing: Functional Test, Performance Test, Load Test, Smoke test ed Integration Test. Ovviamente c’è da considerare che questi temi meriterebbero un libro dedicato, ma Ship it! è in grado di offrire le informazioni essenziali per suscitare almeno la curiosità per ulteriori approfondimenti personali.
Il capitolo si conclude con una sezione chiamata When Not to Experiment, essenziale per quanti soffrono di “mal del voglio provare tutto ora perché figo”! In altre parole, gli autori sottolineano quanto sia fondamentale la scelta di tecnologie che si conoscono ma, soprattutto, non introdurre nuove tecnologie in momenti critici, come quello che precede il rilascio di una nuova versione, solo perché qualcuno ha detto che “questo prodotto funziona meglio di quello”.
Per citare Jared Richardson e William Gwaltney: Never let a critical technology (like your build system) be created as a technology expediment o Don’t use wizard code you don’t understand.
Cosa? Queste affermazioni vi sembrano banali? Allora non avete idea di quanti utilizzino script copia incolla per scrivere routine essenziali di un sistema senza neppure comprendere il loro funzionamento!
Pragmatic Project Techniques
Il capitolo Pragmatic Project Techniques sposta l’attenzione dalle tecnologie alle abitudini e tecniche.
Si parla delle caratteristiche essenziali di un Tech Leader, così come dell’importanza di riunioni quotidiane.
Una decina di pagine sono dedicate all’argomento Code Review descrivendo nel dettaglio vantaggi e svantaggi di questa pratica di sviluppo. Ci tengo a sottolineare come ogni affermazione del libro sia corredata da esempi pratici ed esperienze reali che arricchiscono ulteriormente il valore di ogni consiglio.
L’intero terzo capitolo ruota attorno all’argomento “The List”. Chiunque debba organizzare la propria attività ben conosce l’importanza delle TODO list, di un agenda o di un qualsiasi strumento dove annotare e raccogliere i propri appuntamenti. Gli autori si spingono oltre fino a dedicare decine di pagine a come organizzare al meglio la propria lista delle attività e quella dell’intero team, nel caso il vostro ruolo sia quello di team leader o manager.
Tracer Bullet Development
Il quarto capitolo è interamente dedicato alla pratica di sviluppo Tracer Bullet Development (TBD). Come il Test Driven Development (TDD) o l’Extreme Programming (XP), il TBD è una delle tecniche che si possono adottare nello sviluppo di un software. Questo capitolo ne analizza caratteristiche, pregi e difetti.
Common Problems and How to Fix Them
Come ben saprà chi di voi è abituato a leggere libri ed articoli, un conto è scrivere di buone abitudini un conto è mettere in pratica quanto qualcun altro scrive. Ci sono innumerevoli motivi che possono portare all’impossibilità di adottare una o l’altra tecnologia o condizionare una scelta.
Nel quinto capitolo sono riassunti oltre una decina dei principali problemi collegati alle best practice trattate nel libro, con relativi suggerimenti su come risolverli. Anche in questo caso, ogni problema è documentato con esperienze reali che rendono le soluzioni qualcosa diverso dai classici consigli inutilizzabili.
Non finisce qui!
I capitoli sono terminati, ma il libro non finisce qui.
Ben 8 appendici completano la pubblicazione con risorse ed approfondimenti su sistemi di gestione del codice, scripting tool, issue tracker, framework per il test di prodotti e metodi di sviluppo.
In conclusione
Non più di qualche mese fa, in risposta ad un mio post su HTML.it dedicato allo unit testing, un utente commentò dicendo di quanto sia difficile introdurre certe tecniche nello sviluppo di un software, considerando che spesso i project manager non le conoscono o non ne comprendono l’efficacia. La mia risposta, nuda e cruda, fu che un project manager che non conosca o comprenda l’efficacia di tecniche come l’unit testing o la gestione organizzata di un progetto probabilmente ha ancora molto da imparare e dovrebbe tornare a studiare.
Ad oggi, probabilmente, in quell’occasione avrei allegato un collegamento a Ship it!. Questo libro è infatti un concentrato di molti degli aspetti che un buon project manager dovrebbe conoscere (ed applicare), ma non solo.
Per quanto mi riguarda, la lettura di Ship it! è stata l’occasione per trovare conferma su molte abitudini maturate nel tempo grazie all’esperienza, abitudini che per un motivo o per l’altro non mi sono mai state insegnate direttamente ma ho appreso nel tempo.
Ship it! mi ha permesso di consolidarne l’efficacia e, in molti casi, mi ha aperto la mente permettendomi un uso ancora più professionale.
Il libro ha un costo irrisorio se paragonato al reale valore professionale e non è un caso che compaia in molte presentazioni, non per ultima in quella di Alex Martelli in occasione della PyCon 2007.
L’acquisto è assolutamente consigliato, non solo a chi si occupa di sviluppo software. Molti suggerimenti del libro sono infatti applicabili ad altri ambienti dell’informatica e del web.