Penso che la prima cosa da capire è che c'è una differenza tra l'essere Agile e l'essere Agile. Sviluppare lentamente tecniche e caratteristiche agili: team interfunzionali, pianificazione adattiva, consegna evolutiva / incrementale, iterazioni temporali e persino l'introduzione di concetti di Lean sono molto diversi dall'introduzione di Extreme Programming, Scrum o Crystal.
Citi esplicitamente il coinvolgimento dei clienti. Sì, molte delle metodologie Agile richiedono il coinvolgimento dei clienti, ma non è necessario che siano agili. In ogni programma relativo al governo / alla difesa, ho sempre avuto un programma o un project manager che era il punto di contatto con il cliente. Questa persona diventa la "voce del cliente". Potrebbe essere rallentato in quanto teleconferenza o e-mail o chiamata e chiarimento, ma è possibile avere una sola persona (o un gruppo, se si hanno anche vicepresidenti) che è il rappresentante del cliente del proprio team. Certo, non è proprio lo stesso. Ma non è agile l'essere flessibile e rispondere al cambiamento?
Si citano anche alcuni concetti chiave: requisiti predefiniti, con richieste di funzionalità "gettate oltre il muro", mancanza di priorità in quanto "sono tutti importanti" e progetti a costo fisso e / o a programma fisso. Ognuno di questi può essere affrontato in diversi modi.
Se pensi di avere tutte le tue esigenze in anticipo, è probabile che tu non lo faccia. I requisiti cambiano. Solo perché hai una specifica "completata e firmata" non significa che sia incastonata nella pietra. Dati i documenti di requisiti che hai, acquisiscili come ti senti a tuo agio e / o nel modo specificato dal contratto e fornisci i requisiti, il design e l'architettura. Inoltre, vedi se riesci a trattare questi documenti viventi (un documento di progettazione che ho visto oggi al lavoro è etichettato come Revisione G, il che significa che è sul suo ottavo aggiornamento). Chiedi quanto puoi lasciare come TBD in ogni data iterazione e quanto deve essere risolto ora - ci potrebbero essere alcuni dare e avere.
Sii agile con la tua documentazione. Non duplicare gli sforzi tra "ciò che il tuo team vuole" e "ciò che il cliente desidera". Ad esempio, se il tuo cliente desidera una specifica dei requisiti software tradizionali e il tuo team desidera utilizzare le storie utente, prova ad adattarti a un SRS tradizionale e usa gli oggetti azione e un elenco di articoli azione a rotazione anziché le storie utente in modo da non perdere tempo formulando sia "il sistema deve ..." che "deve essere in grado di perché". Ciò richiede disciplina da parte del team, tuttavia, per adattarsi alle differenze tra i progetti. Cattura i problemi nelle riflessioni.
Una volta arrivato allo sviluppo, potresti eseguire 5 o 6 iterazioni e quindi invitare il tuo cliente alla tua struttura per vedere un sottoinsieme dell'implementazione. Risciacquare e ripetere questo processo. Non è il costante coinvolgimento richiesto da alcune metodologie, ma si ha il vantaggio di un'alta visibilità. Se il tuo cliente dice di no, almeno ci hai provato. Se dicono di sì, puoi illuminarli per essere agili. In un progetto in cui ero presente, il cliente visitava il sito ogni pochi mesi (3-5 mesi, di solito). Ci guarderebbero durante i test di controllo qualità, discuterebbero delle preoccupazioni con gli ingegneri e fare affari con l'ufficio programmi / progetti. È stata un'opportunità per tutti di accedere alla stessa pagina.
I test e la manutenzione avvengono come quelli di altri progetti agili. Crea le tue procedure di test e documenta i difetti nel modo appropriato, monitora le metriche per gli obblighi contrattuali e documenta i risultati dei test. Se vuoi seguire TDD, provaci. L'integrazione continua è un'altra buona idea. Durante le riunioni sullo stato del progetto, il responsabile del progetto può utilizzare queste informazioni per dire "abbiamo implementato N requisiti, disponiamo di test M, test X passati" e aggiorna la salute e lo stato del progetto alle persone con i soldi.
A proposito di denaro, abbiamo il problema del costo fisso e / o del programma fisso.
Trattare con un programma fisso è abbastanza semplice. Dati i tuoi requisiti, sai quante iterazioni puoi completare. Il carico di lavoro per ogni iterazione è praticamente improntato alla pietra in termini di funzionalità da implementare, testare e integrare. Potrebbe essere difficile, ma non è impossibile rompere le funzionalità e assegnarle in anticipo alle iterazioni. Questo risale al mio punto sull'invito al cliente: se hai un anno e stai usando iterazioni di 2 settimane, forse invita il cliente trimestralmente (e invitalo ogni trimestre) e mostra loro i risultati del lavoro precedente. Consenti loro di vedere la tua priorità dei requisiti, i tuoi piani futuri e come stai pianificando.
Trattare con un budget fisso è simile. Sai quanto tempo hai, quante risorse hai per il progetto, quanto costano e quindi quante ore tutti possono lavorare per iterazione. Si tratta solo di garantire che tutti ne tengano traccia con attenzione. Se la tua azienda può sostenere i costi degli straordinari, provaci. Altrimenti, assicurati che tutti lavorino per il periodo di tempo appropriato e usa le buone capacità di gestione del tempo e il time-boxing per mantenere tutti produttivi. Maggiori ore produttive sono ciò di cui hai bisogno per contenere i costi: fornire più documenti e software a valore aggiunto senza i costi delle riunioni e delle spese generali.
In definitiva, non si tratta necessariamente di essere Agili, ma di applicare le cose che rendono Agile buono ed essere agile. Essere in grado di rispondere ai cambiamenti nei requisiti, essere in grado di fornire software frequente anche se il cliente non lo desidera, produrre solo documentazione a valore aggiunto (insieme a tutto ciò che si è obbligati a produrre contrattualmente) e così via.