Contesti in cui le pratiche XP affrontano sfide reali o richiedono adattamenti significativi.
Molti progetti software hanno contratti che fissano scope, data e prezzo. L'approccio iterativo di XP entra in conflitto con questo.
La posizione XP: Non puoi fissare tutti e tre (scope, data, risorse). Qualcosa deve essere flessibile. XP preferisce uno scope flessibile con qualità fissa.
La realtà contrattuale: I clienti vogliono sapere esattamente cosa otterranno, quando e a quanto. I contratti tradizionali promettono questo.
Tensioni:
Opzioni:
XP in ambienti contrattuali non è impossibile, ma richiede educazione del cliente e negoziazione contrattuale.
La Trappola del Contratto
I contratti tradizionali presumono che tu possa sapere tutto in anticipo. Non puoi. Qualcuno si assume il rischio di quell'incertezza—o il cliente (ordini di modifica) o il fornitore (sforamenti). XP cerca di condividerlo attraverso la collaborazione.
XP è stato progettato per team co-locati. Può funzionare da remoto, ma solo con buoni strumenti e cultura di comunicazione.
Sfide:
Se il tuo team distribuito ha:
...le pratiche XP avranno difficoltà.
Per farlo funzionare serve:
Alcuni team distribuiti fanno XP molto bene. Altri non riescono a farlo funzionare. La differenza è solitamente la cultura della comunicazione, non la geografia.
Settori come sanità, finanza e aviazione hanno requisiti normativi che possono entrare in conflitto con le pratiche XP.
Tensioni:
Tuttavia: XP non è impossibile in ambienti regolamentati. Molti team regolamentati usano XP con successo.
Adattamenti:
L'intuizione chiave: le pratiche di qualità di XP spesso superano i minimi normativi. Test completi, code review (pairing) e tracciabilità sono cose che i regolatori vogliono.
Ciò a cui XP resiste è lo spreco: documentazione fine a se stessa, lunghi cicli di approvazione, cerimonie che non migliorano la qualità.
Un team di dispositivi medici usa TDD (i test sono evidenze di validazione), pair programming (revisione a due persone) e CI (tracciabilità). Rilasciano meno frequentemente ma lavorano comunque in modo iterativo. Gli audit vanno bene perché le evidenze sono integrate.
Un team produce volumi di documenti di design prima di codificare (mai aggiornati), esegue test manuali alla fine (trovando bug tardi) ed evita i cambiamenti (perché il cambiamento richiede ri-documentazione). La qualità è scarsa; la conformità è nominale.
Le pratiche ingegneristiche di XP sono non negoziabili. Se il team rifiuta di adottarle, XP non funziona.
Resistenza comune:
Se la resistenza viene dagli sviluppatori:
Se la resistenza viene dal management:
XP richiede adesione. Puoi introdurre le pratiche gradualmente, ma se il team o l'organizzazione rifiuta di impegnarsi nell'eccellenza tecnica, XP non attecchirà.
La resistenza spesso viene dalla paura. Paura di essere esposti come non sapendo qualcosa. Paura di rallentare. Paura del cambiamento. Affronta la paura, non solo l'obiezione.
Alcuni domini rendono TDD significativamente più difficile:
Applicazioni UI-heavy: Testare l'aspetto visivo e l'interazione può essere complicato. (Anche se strumenti moderni come React Testing Library hanno migliorato questo.)
Modelli di machine learning: Testare risultati probabilistici non si adatta al modello assert-equals.
Sistemi dipendenti dall'hardware: Il comportamento dei dispositivi fisici è difficile da simulare.
Sistemi altamente concorrenti: Il comportamento dipendente dal timing è difficile da testare in modo deterministico.
Per questi domini:
Non usare questi come scuse per saltare completamente il testing. Ogni sistema ha parti testabili. Spingi TDD il più lontano possibile; adatta dove devi.