Parte I — Fondamenti · Capitolo 2

Team, integrità concettuale e la rivoluzione Agile

~32 min di lettura5 widget interattivi4 tavole

In questo capitolo

  1. Il team: due proposte alternative
  2. The Surgical Team
  3. The Scrum Team
  4. Dimensioni ideali di un team
  5. Conceptual Integrity
  6. The Second-System Effect
  7. Comunicare: passing the word
  8. Quale documentazione serve
  9. I documenti di un progetto software
  10. La rivoluzione Agile
  11. Verifica le tue conoscenze

1. Il team: due proposte alternative

Per la riuscita di un progetto uno degli elementi fondamentali è il team, e la sua corretta composizione è un prerequisito per una gestione efficiente. La composizione è fortemente influenzata dall'ambito del progetto e dalle metodologie che si intende utilizzare.

Il corso mette a confronto due proposte molto alternative:

Sono solo due esempi, ma permettono di individuare i ruoli principali che devono essere coperti dai componenti di un team — indipendentemente dall'organizzazione che poi si sceglie.

2. The Surgical Team

Per l'organizzazione del lavoro in un generico progetto di sviluppo software, Harlan Mills suggerì un approccio che nella sua essenza è adottato ancora oggi: affidare i task a team di dimensioni limitate, organizzati come una squadra chirurgica. Nove figure, con un centro di gravità evidente.

CHIRURGO dirige il team decide architettura copilota amministratore editor segretario program clerk toolsmith tester language lawyer Harlan Mills — organizzazione a squadra chirurgica Oggi, soprattutto nelle aziende medio-piccole, più ruoli sono interpretati dalla stessa persona; la tendenza è verso team «orizzontali» in cui gli sviluppatori coprono direttamente molte di queste mansioni.
Tavola 2.1 — Il pregio della proposta di Mills non è la lista dei ruoli, ma il fatto di rendere esplicite le mansioni che vanno comunque coperte all'interno di un team.
RuoloMansione
ChirurgoDirige il team. Prende tutte le decisioni su architettura e specifiche, sia funzionali sia di performance; codifica le parti più impegnative, testa il codice e scrive la documentazione.
CopilotaAlter-ego del chirurgo, in grado di fare tutto ciò che fa lui ma con meno esperienza. Il chirurgo condivide con lui tutte le scelte progettuali, ma il suo parere può essere ignorato.
AmministratoreIl chirurgo ha pieni poteri e controlla anche gli aspetti amministrativi, ma ha bisogno di un esecutore delle sue direttive. In genere è condiviso da più team.
EditorLa documentazione è responsabilità del chirurgo, ma l'editor la corregge, la organizza e la aggiorna a fronte di modifiche.
ToolsmithRealizza, installa e manutiene tutti gli strumenti e le risorse necessarie agli sviluppatori.
TesterPrepara ed esegue i test per i diversi casi d'uso, cercando insiemi di dati rappresentativi delle situazioni operative — inclusi i dati di casi reali che hanno causato malfunzionamenti.
Program clerkImpiegato che supporta amministratore ed editor, ma con conoscenze e responsabilità tecniche.
SegretarioSupporta in particolare amministratore ed editor; non deve avere conoscenze tecniche.
Language lawyerDefinisce come usare il linguaggio di programmazione per implementare particolari parti di codice. Agli albori dell'informatica era fondamentale.
Nota del redattore

L'evoluzione tecnologica e metodologica ha trasformato alcuni ruoli, in certi casi depotenziandoli (il language lawyer, il segretario) e in altri potenziandoli (il toolsmith, oggi vicino a chi cura CI/CD e piattaforma). Il punto che regge nel tempo: indipendentemente dall'organizzazione adottata, quelle mansioni esistono e qualcuno le deve fare.

3. The Scrum Team

All'estremo opposto c'è Scrum, framework di project management proposto negli anni Novanta da Ken Schwaber e Jeff Sutherland per lo sviluppo iterativo e incrementale di prodotti software. Il termine, che nel rugby indica la mischia, descrive un approccio in cui le persone sono concentrate sullo stesso obiettivo: il successo del progetto. Nel rugby lo sprint è quel tratto di corsa che si fa per portare avanti il pallone: «il portatore di palla corre in avanti seguito dai suoi compagni che lo sostengono: spirito di gruppo, comunicazione, empatia sono tutte caratteristiche importanti».

In Scrum il lavoro viene suddiviso in iterazioni (gli sprint), di durata ben precisa e predeterminata, e sono previsti solo tre ruoli.

Ha la responsabilità del prodotto, conosce l'utente e i suoi bisogni. È responsabile del «cosa» sarà contenuto all'interno del prodotto, ma non del «come» questo verrà realizzato, che è di competenza del team di sviluppo.

Il suo ruolo non è quello del «capo» del team, come il termine master potrebbe far pensare: è un coach al servizio del team, che ne aiuta la crescita, agevola la comunicazione, fa in modo che si rispettino le indicazioni.

È composto da persone che dovrebbero avere tutte le competenze per sviluppare la soluzione, cioè le user story inserite nel loro backlog. Per questo motivo dovrebbero sempre avere la massima autonomia sulle scelte tecniche, in particolare sul come implementare le funzionalità.

Idea chiave

La separazione cosa / come non è un'invenzione agile: è la stessa che Brooks pone tra architetto e implementatore (paragrafo 5). Cambia chi la presidia — un Product Owner al posto di un architetto — e cambia il momento in cui viene fissata, ma il confine è lo stesso.

4. Dimensioni ideali di un team

Il dimensionamento del team di sviluppo è un tema molto dibattuto, ma c'è accordo su un punto: team troppo numerosi sono di difficile gestione, perché richiedono un alto overhead per le comunicazioni.

Two-Pizza Team Rule

Secondo Jeff Bezos, un team deve avere un numero di componenti che possono essere sfamati da due pizze. Quante persone si possono accontentare di due pizze? L'idea è ormai condivisa da una vasta platea di professionisti, che quantifica le dimensioni ideali in circa 4–8 sviluppatori.

Quindi, indipendentemente dalle dimensioni dell'azienda e dal numero di sviluppatori coinvolti in un progetto, i team non devono superare un certo numero di componenti. Sulla composizione, invece, resta aperta la scelta tra team generalisti (per esempio full-stack), specialisti (che coprono uno specifico dominio) o un mix dei due.

Canali di comunicazione in un team di n persone: n(n−1)/2 n = 3 3 canali n = 6 15 canali n = 12 66 canali Raddoppiare il team da 6 a 12 persone moltiplica per 4,4 i canali da tenere allineati: è questo, e non la somma delle ore, il costo che la Legge di Brooks misura.
Tavola 2.2 — Perché la regola delle due pizze funziona: l'overhead di comunicazione cresce con il quadrato della dimensione del team, non linearmente.

Calcolatore: canali di comunicazione e regola delle due pizze

Muovi il cursore e osserva quanti collegamenti bisogna tenere allineati.

canali n(n−1)/215
canali per persona5,0
rispetto a n=4×2,5

5. Conceptual Integrity

Il rispetto della conceptual integrity è molto importante e al tempo stesso difficile da definire. Per produrre un sistema efficace, efficiente e user-friendly è necessario che le funzionalità e la loro implementazione rispondano solo e solamente ai requisiti definiti in fase di progettazione.

Il motivo è semplice: se un sistema è troppo complicato da usare, molte delle sue funzionalità non saranno usate, perché nessun utente ha il tempo e la pazienza di impararle.

Architettura e implementazione

Per mantenere l'integrità concettuale è necessario separare l'architettura dall'implementazione. Uno o più architetti decidono cosa deve essere presente nel sistema e cosa no, tenendo in considerazione le esigenze dell'utente finale; devono poi assicurarsi che la loro visione sia condivisa dal resto del team. Il come il sistema dovrà essere implementato lo definisce invece il team che si prende carico dell'implementazione.

Delegare l'implementazione al team permette una gestione più efficiente ed evita di sovraccaricare l'architetto, che rischia altrimenti di diventare un collo di bottiglia. Brooks riassume così: «Architecture is what happens, and implementation is how it happens», e parla in questo contesto di aristocracy e democracy.

ARCHITETTURA what happens cosa c'è nel sistema e cosa no esigenze dell'utente finale «aristocracy» IMPLEMENTAZIONE how it happens libertà creativa del team scelte tecniche «democracy» il confine da difendere I tre pericoli per gli architetti 1. specifiche troppo «ricche», che non considerano i costi di implementazione; 2. gli architetti si prendono tutto il divertimento, lasciando pochi margini alla creatività di chi implementa; 3. gli sviluppatori vanno coinvolti quando le specifiche sono pronte, o addirittura mentre vengono definite. Se gli architetti rispettano il confine tra «what» e «how», l'implementazione può essere divertente.
Tavola 2.3 — Il confine tra architettura e implementazione è la difesa operativa dell'integrità concettuale: agli sviluppatori deve restare la «gioia» di dare libero sfogo alla propria creatività, purché dentro quel perimetro.

6. The Second-System Effect

Il primo sistema che si progetta e implementa prevede solitamente solo le funzionalità richieste dall'utente e ha un'implementazione «pulita». Appena è completato ci si accorge che potrebbe essere migliorato, modificando l'implementazione di alcune funzionalità o aggiungendone di nuove: queste idee vengono riservate per il prossimo progetto.

Attenzione

Per questa ragione il secondo sistema viene progettato aggiungendo «tutto» ciò che si ritiene di aver dimenticato nel primo. Ma passare da un better design a un over design è molto facile — e l'over design ha un impatto negativo anche sui costi, perché non valuta correttamente il rapporto costi/benefici.

La raccomandazione di Brooks è che il management punti su personale con almeno due progetti/sistemi alle spalle: chi ha già attraversato l'effetto del secondo sistema è vaccinato. È una posizione discutibile — il corso la propone esplicitamente come domanda aperta: cosa ne pensate?

7. Comunicare: passing the word

Come si comunica in un progetto? Brooks distingue tre canali, dal più informale al più strutturato.

CanaleChe cos'è
InformallyTelefono, pausa caffè, instant message, pub…
MeetingsRiunioni a cadenza regolare o al bisogno, dove i team informano gli altri (colleghi, altri team, manager) sullo stato di avanzamento, sulle criticità riscontrate, su proposte progettuali o implementative.
WorkbookContenitore in cui sono riportate formalmente tutte le informazioni riguardanti un progetto. Anni fa erano documenti stampati su carta, oggi sono sempre più spesso fruibili via web usando intranet aziendali, soluzioni cloud, ecc.

8. Quale documentazione serve

Brooks apre il tema con una confessione istruttiva: «For several years I diligently lectured my software engineering class on the necessity and propriety of good documentation, exhorting them even more fervently and eloquently. It didn't work. I assumed they had learned how to document properly and were failing for lack of zeal. Then I tried showing them how the job is done. This has been much more successful.»

Documentare il proprio lavoro è fondamentale per: indicare il funzionamento di un programma o di un componente; ricordarsi a distanza di tempo cosa si è fatto; condividere il proprio lavoro con i colleghi; definire formalmente le interfacce tra componenti; tenere traccia di problemi e soluzioni (per esempio i bug); stabilire i test case e definirne l'utilizzo.

The Manual

Le specifiche scritte dell'architetto potrebbero essere fornite sotto forma di manuale, che riporta in dettaglio tutte le specifiche dell'interfaccia, cioè tutto ciò che l'utente vede. Il manuale è anche uno strumento per la progettazione, spesso sottovalutato: può essere modificato dai feedback degli utenti finali e del team di implementazione, e nei capitolati di progetto sarebbe buona norma riportarlo, perché costituisce un insieme di specifiche molto dettagliato e molto efficace nella fase di test e validazione da parte del cliente. (Domanda aperta del corso: al giorno d'oggi, che fine hanno fatto i manuali?)

To Use A Program

«Most documentation fails in giving too little overview. The trees are described, the bark and leaves are commented, but there is no map of the forest.» Ogni utente necessita di una descrizione in prosa del software, sintetica ma esaustiva — compito non facile — e questa documentazione dovrebbe essere già disponibile prima che il software sia implementato. Brooks individua i quesiti a cui bisogna dare risposta:

QuesitoDomanda
PurposeQual è la funzione principale del software?
EnvironmentSu quale macchina, configurazione e sistema operativo girerà?
Domain and RangeQuale dominio dell'input è valido? Quale output si ritiene ammissibile?
Function Realized and Algorithm UsedPrecisamente cosa permette di fare il software, e come?
Input-Output FormatsQual è il formato e il mezzo per input e output? La descrizione deve essere completa e precisa.
Operating InstructionCome si usa? Quali sono le eccezioni e come si gestiscono?
OptionsQuali scelte può effettuare l'utente? Come vanno specificate?
Running TimeQuanto tempo impiega per eseguire una funzionalità su un input di una certa dimensione e su una macchina di data configurazione?
Accuracy and CheckingQuanto è precisa la soluzione fornita? Ci sono funzionalità per il controllo di accuratezza e correttezza?

To Modify a Program

Le domande cambiano: come consentire modifiche e correzioni in futuro? Come riutilizzare il lavoro fatto in passato? Come consentire anche ad altri di intervenire sul codice? Servono tutti i dettagli dell'implementazione: chi modifica il codice ha bisogno di una descrizione chiara e precisa della struttura interna dei componenti. Gli elementi utili sono:

Self-Documenting Programs

Martin Fowler sostiene che il codice stesso può essere considerato la documentazione principale di un sistema software, ma ricorda anche che non deve essere l'unica documentazione disponibile. Un modo efficace ed efficiente per documentare il codice è inserire la documentazione nel codice stesso: commenti, nomi delle variabili, indentazione. Il vantaggio è che la documentazione è immediatamente disponibile e allineata con il codice — a patto che lo sviluppatore aggiorni i commenti con costanza. Usando particolari regole sintattiche nella scrittura dei commenti si può anche produrre documentazione in automatico (Doc++, Doxygen).

Il confronto proposto a lezione è impietoso. Ecco la prima versione:

float O[ND,NG];
float P[ND];
float S[ND];

F1(ND,NG,O);
F2(ND,P)

for (i=0; i<ND; i++)
{
   S[i] = 0.0;
   for (j=0; j<NG; j++)
   {
       if (O[i,j]>8)
          S[i] += (8 + 1.2 * (O[i,j]-8)) * P[i];
       else
          S[i] += O[i,j] * P[i];
   }
}

E questa è la stessa identica logica, riscritta. Clicca su una riga per la spiegazione:

Idea chiave

Non è cambiata una sola istruzione: sono cambiati i nomi e c'è un commento. La regola dello straordinario pagato il 20% in più era già lì, nel numero 1.2, ma nessuno poteva vederla.

9. I documenti di un progetto software

Molti progetti di sviluppo software iniziano con numerose riunioni per definire la struttura, poi si inizia subito a scrivere il codice. Anche per progetti di piccole dimensioni sarebbe opportuno produrre della documentazione. Per gestire un progetto software è necessario quanto meno produrre i documenti seguenti, che Brooks organizza per domanda.

DomandaDocumentoContenuto
WhatObjectiveI bisogni che devono essere soddisfatti, gli obiettivi, i desiderata, i vincoli e le priorità.
WhatProduct specificationsLa prima versione può essere una proposta sintetica, ma deve evolvere in un documento completo: il manuale (ciò che vede l'utente) più una descrizione dettagliata dell'implementazione (a uso interno).
WhenScheduleL'organizzazione di tutte le attività di progetto (Gantt, ecc.). Può prevedere l'uso di strumenti software specifici (per esempio Microsoft Project).
How muchBudgetTra i documenti più importanti per la gestione: il budget può influenzare anche le scelte tecniche.
WhereSpace allocationNella produzione del software non è di solito un tema fondamentale, ma non va sottovalutato e va comunque considerato.
WhoOrganization chartDocumentare l'organizzazione delle risorse coinvolte è fondamentale sia per attribuire compiti e responsabilità, sia per stabilire la rete delle comunicazioni (e quindi la rete delle responsabilità).
Nota del redattore

L'organizzazione delle risorse umane e l'assegnazione delle mansioni hanno una forte interrelazione con l'architettura da implementare: per questo la documentazione riguardante l'organizzazione deve avere una corrispondenza biunivoca con la documentazione tecnica. È la formulazione «di progetto» di ciò che oggi chiamiamo legge di Conway.

Esercizio: quale documento risponde alla domanda?

Clicca prima una domanda, poi il documento che le corrisponde.

0 su 6 abbinamenti corretti.

Perché documenti formali?

  1. Mettere per iscritto le decisioni è fondamentale. Solo quando si scrive ci si accorge delle inconsistenze e del gap tra l'idea e l'implementazione; nello scrivere è necessario prendere numerose «mini-decisioni» che nella fase di ideazione non era stato necessario prendere.
  2. La documentazione serve per comunicare le decisioni agli altri. Se un aspetto del progetto non è documentato, non ci si può sorprendere se qualche membro del team lo ignora; se il progetto non è ben documentato è facile che l'integrità concettuale sia violata e che il prodotto finale non rispetti alcuni requisiti. Il compito fondamentale del management è far andare tutti nella stessa direzione: quindi non è solo prendere decisioni, ma anche comunicarle.
  3. La documentazione è un database e una checklist per il progetto: deve essere continuamente aggiornata e registrare l'evoluzione del progetto. Quando la aggiornano, management e sviluppatori capiscono dove sono e quali cambiamenti di rotta sono stati apportati.
Per l'esame

La citazione da mandare a memoria, perché lega documentazione e ruolo del manager: «The task of the manager is to develop a plan and then to realize it. But only the written plan is precise and communicable. Such a plan consists of documents on what, when, how much, where, and who. This small set of critical documents encapsulates much of the manager's work. If their comprehensive and critical nature is recognized in the beginning, the manager can approach them as a friendly tools rather than annoying busywork.»

10. La rivoluzione Agile

Tutto ciò che si è detto finora è in linea con un approccio tradizionale al project management. Negli ultimi anni, nello sviluppo software, si sono imposti numerosi approcci che sembrano «violare» molti di quei principi: il movimento di maggior successo è Agile.

Le idee ispiratrici sono riassunte nel Manifesto for Agile Software Development (agilemanifesto.org), redatto nel febbraio 2001, quando 17 sviluppatori si incontrarono allo Snowbird Resort nello Utah per discutere di metodi di sviluppo «leggeri». A quanto pare non avevano le stesse idee, ma trovarono un accordo su quattro punti.

Through this work we have come to value: Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan That is, while there is value in the items on the right, we value the items on the left more.
Tavola 2.4 — I quattro valori del Manifesto. La colonna di destra non viene negata: viene messa in second'ordine. È la parte del testo che più spesso viene dimenticata.

I dodici principi

  1. Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
  2. Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
  3. Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
  4. Business people and developers must work together daily throughout the project.
  5. Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done.
  6. The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
  7. Working software is the primary measure of progress.
  8. Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
  9. Continuous attention to technical excellence and good design enhances agility.
  10. Simplicity — the art of maximizing the amount of work not done — is essential.
  11. The best architectures, requirements, and designs emerge from self-organizing teams.
  12. At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.
Attenzione — una precisazione importante

Dallo stesso agilemanifesto.org: «The Agile movement is not anti-methodology, in fact, many of us want to restore credibility to the word methodology. We want to restore a balance. We embrace modeling, but not in order to file some diagram in a dusty corporate repository. We embrace documentation, but not hundreds of pages of never-maintained and rarely-used tomes. We plan, but recognize the limits of planning in a turbulent environment.» Agile non significa «niente modelli, niente documenti, niente piano».

Brooks o Agile? Colloca l'affermazione

Per ogni affermazione, scegli se è in linea con l'impostazione tradizionale di Brooks o con il Manifesto Agile.

Domanda 1 di 6.

Verifica le tue conoscenze

Qual è il pregio della proposta del surgical team, al di là dei nove ruoli?

Il pregio è di evidenziare le mansioni che dovrebbero essere coperte all'interno di un team, indipendentemente dall'organizzazione adottata. Oggi, soprattutto nelle aziende medio-piccole, alcuni ruoli sono interpretati dalla stessa persona, e la tendenza è verso team «orizzontali» in cui gli sviluppatori gestiscono direttamente molte delle mansioni del surgical team; ma quelle mansioni continuano a esistere.

Qual è la differenza di responsabilità tra Product Owner e team di sviluppo in Scrum?

Il Product Owner ha la responsabilità del prodotto, conosce l'utente e i suoi bisogni, ed è responsabile del «cosa» sarà contenuto nel prodotto. Il team di sviluppo è responsabile del «come»: dovrebbe avere tutte le competenze per sviluppare le user story del proprio backlog e la massima autonomia sulle scelte tecniche. Lo Scrum Master non è il capo: è un coach al servizio del team, che ne agevola crescita e comunicazione e fa in modo che si rispettino le indicazioni.

Che cos'è la Two-Pizza Team Rule e a che numero porta?

È la regola attribuita a Jeff Bezos secondo cui un team deve avere un numero di componenti sfamabili da due pizze. La platea professionale quantifica le dimensioni ideali in circa 4–8 sviluppatori. La ragione tecnica è l'overhead di comunicazione: team troppo numerosi sono di difficile gestione.

Che cos'è l'integrità concettuale e come si difende?

È la proprietà per cui le funzionalità e la loro implementazione rispondono solo e solamente ai requisiti definiti in fase di progettazione: il sistema fa tutto ciò per cui è stato progettato (efficacia), lo fa nel modo migliore (efficienza), e nessuna funzionalità non prevista viene implementata. Si difende separando l'architettura dall'implementazione: gli architetti decidono cosa deve esserci e cosa no, tenendo conto dell'utente finale, e assicurano che la visione sia condivisa; il team decide come implementare. «Architecture is what happens, and implementation is how it happens.»

Perché delegare l'implementazione al team, invece di farla decidere all'architetto?

Per due motivi. Primo, efficienza: non delegare sovraccarica l'architetto, che diventa un collo di bottiglia. Secondo, motivazione: agli sviluppatori deve essere lasciata la «gioia» di dare libero sfogo alla propria creatività, purché sia rispettata l'integrità concettuale di quanto progettato. I tre pericoli per gli architetti sono infatti: specifiche troppo ricche che ignorano i costi di implementazione; prendersi tutto il divertimento lasciando pochi margini creativi; non coinvolgere gli sviluppatori quando le specifiche sono pronte o mentre vengono definite.

In che cosa consiste il second-system effect?

Il primo sistema prevede solo le funzionalità richieste e ha un'implementazione pulita. Appena è completato nascono idee di miglioramento, che vengono riservate per il progetto successivo. Il secondo sistema viene quindi progettato aggiungendo tutto ciò che si ritiene di aver dimenticato nel primo, e il passaggio da better design a over design è molto facile. L'over design ha impatto negativo anche sui costi, perché non valuta correttamente il rapporto costi/benefici. La raccomandazione di Brooks: puntare su personale con almeno due progetti alle spalle.

Quali sono i cinque documenti minimi di un progetto software secondo Brooks?

Organizzati per domanda: what (objective: bisogni, obiettivi, desiderata, vincoli, priorità — e product specifications: manuale più descrizione dettagliata dell'implementazione), when (schedule: Gantt e organizzazione delle attività), how much (budget, che può influenzare anche le scelte tecniche), where (space allocation, non fondamentale nel software ma da non sottovalutare), who (organization chart, per attribuire compiti e responsabilità e stabilire la rete delle comunicazioni).

Perché la documentazione dell'organizzazione deve corrispondere a quella tecnica?

Perché l'organizzazione delle risorse umane e l'assegnazione delle mansioni hanno una forte interrelazione con l'architettura che si deve implementare. La documentazione sull'organizzazione deve quindi avere una corrispondenza biunivoca con la documentazione tecnica: la rete delle comunicazioni è anche la rete delle responsabilità.

Che cosa sostiene Martin Fowler sui self-documenting programs, e con quale limite?

Sostiene che il codice stesso può essere considerato la documentazione principale di un sistema software, ma ricorda che non deve esserne l'unica. Documentare dentro il codice (commenti, nomi delle variabili, indentazione) è efficace ed efficiente perché la documentazione è immediatamente disponibile e allineata — a patto che lo sviluppatore aggiorni i commenti con costanza. Con regole sintattiche apposite si può generare documentazione automatica (Doc++, Doxygen).

Quali sono i quattro valori del Manifesto Agile, e qual è la clausola finale?

Individuals and interactions over processes and tools; working software over comprehensive documentation; customer collaboration over contract negotiation; responding to change over following a plan. La clausola finale, spesso dimenticata: «while there is value in the items on the right, we value the items on the left more» — la colonna di destra non viene negata, viene messa in secondo piano.

Agile significa «niente documentazione e niente piano»?

No, e il Manifesto lo precisa esplicitamente: il movimento non è anti-metodologia, anzi molti dei firmatari vogliono restituire credibilità alla parola metodologia. Abbracciano il modeling, ma non per archiviare diagrammi in un polveroso repository aziendale; abbracciano la documentazione, ma non centinaia di pagine mai manutenute e raramente usate; pianificano, ma riconoscendo i limiti della pianificazione in un ambiente turbolento.

Come si comunica in un progetto secondo Brooks?

Su tre canali: informally (telefono, pausa caffè, instant message, pub); meetings, a cadenza regolare o al bisogno, dove i team informano gli altri su stato di avanzamento, criticità e proposte; workbook, il contenitore in cui sono riportate formalmente tutte le informazioni del progetto — un tempo su carta, oggi via web su intranet o cloud.