Quello che descrivi è - almeno nella mia esperienza - un modello emergente abbastanza comune di team che cercano di "essere agili". È aperto al dibattito se questo fa effettivamente parte dell'Agile stesso o di una sua errata implementazione, è contro il manifest / principi agili o una conseguenza intrinseca di esso, e così via. Solo da un punto di vista empirico e basato solo sul mio piccolo set di esperienze (e sulle persone con cui parlo), se una squadra è agile sembra avere una probabilità superiore alla media di imbattersi in questo schema. Lasciamolo e concentriamoci sul tuo esempio concreto.
Ci sono due aspetti separati in ciò che descrivi:
- Manca comprensione / visione comune e quindi non essere efficiente
- Come misurare successo / progresso e costo totale
Percorrendo la strada sbagliata o correndo in cerchio
Nella mia esperienza, il motivo principale per cui ciò accade è che nel tentativo di produrre rapidamente codice, i team mettono attivamente da parte i casi d'uso o i requisiti che già conoscono o che potrebbero facilmente conoscere. Pensala in questo modo: 10-20 anni fa, le persone hanno provato a scrivere specifiche gigantesche e pensare a tutto in anticipo e spesso hanno fallito. O impiegarono troppo tempo o trascurarono qualcosa. Uno degli apprendimenti del passato è che nello sviluppo del software ci sono cose che non si possono sapere e le cose cambiano molto, quindi l'idea di iterare rapidamente e produrre velocemente un output sensato. Qual è un ottimo principio. Ma oggi siamo all'estremo opposto: "Non mi interessa questo perché fa parte del prossimo sprint" o "Non file quel bug, lo risolvo quando si ripresenta".
- Raccogli tutti i casi d'uso , i requisiti, le dipendenze e le restrizioni di alto livello che puoi trovare. Inseriscilo in qualche wiki in modo che tutti gli stakeholder e gli sviluppatori possano vederli. Aggiungi a loro quando arriva qualcosa di nuovo. Parla con i tuoi azionisti e utenti. Utilizzare questo come una lista di controllo durante lo sviluppo per impedire l'implementazione di cose che non contribuiscono al prodotto finale o sono soluzioni alternative / hack che risolvono un problema ma ne causano tre nuovi.
- Formulare un concetto di alto livello . Non sto parlando di progettare interfacce o classi, ma piuttosto delineare approssimativamente il dominio del problema. Quali sono gli elementi, i meccanismi e le interazioni principali nella soluzione finale? Nel tuo caso, dovrebbe essere ovvio quando si utilizza jquery-workaround aiuta come passaggio intermedio e quando causa solo lavoro aggiuntivo.
- Convalida il tuo concetto utilizzando l'elenco che hai raccolto. Ci sono ovvi problemi in esso? Ha senso? Esistono modi più efficienti per ottenere lo stesso valore per l'utente senza causare indebitamento tecnologico a lungo termine?
Non esagerare. Hai solo bisogno di qualcosa in modo che tutti nel team (inclusi i non sviluppatori) abbiano una comprensione comune di quale sia il percorso migliore per il tuo MVP. Tutti dovrebbero concordare sul fatto che non ci sono svantaggi ovvi e che potrebbe effettivamente funzionare. Questo in generale aiuta a prevenire i vicoli ciechi o a dover ripetere la stessa cosa più volte. Agile può aiutarti a gestire meglio gli imprevisti, non è un argomento ignorare ciò che è noto.
Siate consapevoli dell'errore sommerso : se inizi con un'architettura o un tipo di database, la maggior parte delle persone è titubante nel cambiarlo a metà progetto. Quindi è una buona idea investire un po 'di tempo nell'avere una "ipotesi migliore educata" prima di iniziare a implementare cose. Gli sviluppatori hanno la tendenza a voler scrivere codice rapidamente. Ma spesso avere un paio di beffe, prototipi live, schermate, wireframe, ecc. Consente un'iterazione ancora più veloce rispetto alla scrittura di codice. Basta essere consapevoli del fatto che ogni riga di codice scritta o anche unit test rende più difficile cambiare di nuovo il tuo concetto generale.
Misurare il successo
Un aspetto completamente separato è come misurare i progressi. Diciamo che l'obiettivo del tuo progetto è quello di costruire una torre alta 1 m usando le cose intorno. Costruire un castello di carte può essere una soluzione totalmente valida se ad esempio il time to market è più importante della stabilità. Se il tuo obiettivo è costruire qualcosa che duri, usare Lego sarebbe stato meglio. Il punto è: ciò che è considerato un hack e ciò che una soluzione elegante dipende interamente da come viene misurato il successo del progetto .
Il tuo esempio di "caricamento" è abbastanza buono. Ho avuto cose del genere in passato, in cui tutti (compresi vendite, ordini di acquisto, utenti) erano d'accordo sul fatto che fosse fastidioso. Ma non ha avuto alcun impatto sul successo del prodotto e non ha causato debiti a lungo termine. Quindi l'abbiamo lasciato cadere perché c'erano cose più preziose da fare con le risorse di sviluppo.
Il mio consiglio qui è:
- Conserva tutto, anche piccoli bug, come biglietti nel tuo sistema di ticket . Prendi una decisione attiva su cosa rientra nell'ambito del progetto e cosa no. Crea pietre miliari o altrimenti filtra il tuo backlog in modo da avere sempre un elenco "completo" di tutto ciò che deve ancora essere fatto.
- Hanno un ordine di importanza rigoroso e un chiaro punto di interruzione in cui il progetto potrebbe essere considerato un successo. Di quale livello di stabilità / qualità del codice / documentazione è effettivamente necessario il prodotto finale? Cerca di trascorrere ogni giorno di lavoro nel miglior modo possibile scegliendo dall'alto. Quando si lavora su un biglietto, provare a risolverlo completamente senza introdurre nuovi biglietti (a meno che non abbia senso postare le cose a causa di una priorità inferiore). Ogni impegno dovrebbe portarti avanti verso il tuo obiettivo finale, non lateralmente o all'indietro. Ma per sottolinearlo di nuovo: a volte un hack che produce lavoro aggiuntivo in seguito può ancora essere un netto positivo per il progetto!
- Usa i tuoi PO / utenti per capire il valore dell'utente, ma fai anche capire ai tuoi sviluppatori il costo della tecnologia . I non sviluppatori in genere non possono giudicare quale sia il vero costo a lungo termine (non solo i costi di implementazione!), Quindi aiutali. Siate consapevoli del problema dell'ebollizione delle rane: molti problemi piccoli e irrilevanti possono col passare del tempo una squadra in attesa. Cerca di quantificare l'efficienza della tua squadra.
- Tieni d'occhio l'obiettivo / i costi complessivi. Invece di pensare da uno sprint all'altro, piuttosto mantenere una mentalità di "possiamo noi come squadra fare tutto il necessario fino alla fine del progetto" . Gli Sprint sono solo un modo per scomporre le cose e avere check-points.
- Invece di voler mostrare qualcosa in anticipo, traccia il tuo percorso sul percorso più veloce verso un prodotto minimo praticabile che può essere dato all'utente. Tuttavia, la tua strategia generale dovrebbe consentire risultati verificabili nel mezzo.
Quindi, quando qualcuno fa qualcosa che non rientra nel tuo obiettivo finale di implementazione, idealmente non considerare la storia fatta. Se è utile chiudere la storia (ad es. Per ottenere feedback dai clienti), apri immediatamente una nuova storia / bug per affrontare le carenze. Rendi trasparente che prendere scorciatoie non riduca i costi, li nasconde o li ritarda!
Il trucco qui è discutere con il costo totale del progetto: se per esempio un PO spinge a prendere scorciatoie per fissare una scadenza, quantificare la quantità di lavoro che deve essere fatto in seguito per considerare il progetto fatto!
Attenzione anche all'ottimizzazione basata su criteri : se il tuo team è misurato dal numero di storie che può mostrare in una recensione sprint, il modo migliore per ottenere un buon "punteggio" è quello di tagliare ogni storia in dieci minuscole. Se viene misurato dal numero di unit test scritti, tenderà a scrivere molti di quelli non necessari. Non contare le storie, piuttosto avere una misura di quanto funzioni la funzionalità utente necessaria, quanto è grande il costo del debito tecnologico da risolvere nell'ambito del progetto, ecc.
Sommario
Per farla breve: andare veloce e minimale è un buon approccio. Il problema è interpretare "veloce" e "minimo". Si dovrebbe sempre considerare il costo a lungo termine (a meno che non si disponga di un progetto in cui questo è irrilevante). L'uso di una scorciatoia che richiede solo 1 giorno ma produce un debito tecnologico di 1 mese dopo la data di spedizione costa alla tua azienda più di una soluzione che ha richiesto 1 settimana. Iniziare immediatamente a scrivere test sembra veloce, ma non se il tuo concetto è difettoso e cementano un approccio sbagliato.
E tieni a mente cosa significa "a lungo termine" nel tuo caso: conosco più di una società che ha fallito cercando di scrivere un ottimo codice e quindi spedito troppo tardi. Una buona architettura o un codice pulito - dal punto di vista dell'azienda - è prezioso solo se il costo per raggiungerlo è inferiore al costo di non averlo.
Spero che sia d'aiuto!