Agile
Suggerirei quanto segue:
Modifica degli stessi file
Innanzitutto, usa Git (o un sistema di versioning simultaneo simile). Finché stai modificando parti diverse degli stessi file, non otterrai conflitti. Se si verificano conflitti, saranno chiaramente indicati come tali.
Cercare di gestire un progetto multi-sviluppatore senza Git è come provare a fare un budino senza una ciotola di budino. È possibile, ma diventerà piuttosto disordinato abbastanza velocemente.
Come è stato sottolineato nei commenti, Git non è una panacea, ma combinato con i test automatizzati aiuta sicuramente molto.
Elenca tutte le funzionalità
In secondo luogo, suddividere il progetto in funzioni visibili all'utente. Ad esempio "quando l'utente si registra, dovrebbe ricevere un'e-mail" o "L'utente può aggiungere un elemento". Coinvolgi tutte le parti interessate qui. Porta tutti in una stanza e chiedi a tutti di urlare le loro caratteristiche.
Queste dovrebbero essere funzionalità visibili all'utente, puoi parlare della strategia di implementazione in un secondo momento.
Scrivi tutti i suggerimenti sulle schede, anche quelle stupide. Razionalizza rapidamente l'elenco per rimuovere i duplicati e disponi tutte le carte su un grande tavolo o persino sul pavimento.
Aggiungi eventuali carte aggiuntive necessarie. Supponiamo che l'applicazione invierà avvisi di testo SMS. Potresti non sapere come farlo, quindi hai una domanda. Scrivi "Esamina portali SMS" su una scheda. Allo stesso modo per qualsiasi altra grande incognita. Dovrai decomprimere questi in seguito. Queste caratteristiche probabilmente non riusciranno a fare il tuo primo sprint.
Ora ordinare le carte in gruppi, mescolarle circa, ottenere un tatto per loro. Questo è lo scopo del tuo progetto.
Pianificazione del poker
Prova a pianificare il poker. Sempre con tutti insieme, dai a tutti gli sviluppatori le carte che dicono "1 punto", "2 punti", ecc., Fino a "4 punti". Anche una "più" carta. Un punto equivale all'incirca a un'ora.
Scorri l'elenco delle funzionalità uno per uno. Mentre leggi una funzione, tutti devono giocare una carta. Se una persona gioca 1, e un'altra persona gioca 4, c'è un problema di comunicazione lì. Una persona comprende la funzione per significare qualcosa di diverso dall'altra persona. Discuti e scopri cosa intendeva realmente e annotalo sulla carta.
Se si accetta che una funzione è un "altro", tale funzione è troppo grande. Devi rompere quella funzione. Fallo allo stesso modo di prima.
Come concordato, scrivi i numeri sulle carte con una penna di colore diverso.
I punti sono meglio delle ore
L'uso dei punti anziché delle ore toglie il macho "guarda quanto velocemente posso codificare" cosa in cui spesso noi sviluppatori ci impegniamo. È una differenza sottile, ma ho scoperto che funziona piuttosto bene.
Ora componi uno sprint
Uno sprint è un rapido scoppio verso un obiettivo. Decidi la durata dello sprint, forse 5 o 10 giorni. Moltiplicare il numero di giorni per il numero di sviluppatori per il numero di punti al giorno.
Assumi inizialmente 6 punti al giorno per sviluppatore. Questo è un numero raggiungibile. Se hai 5 persone, questo è 5 * 5 * 6 = 150 punti. In collaborazione con tutti gli sviluppatori e la gestione, seleziona le funzionalità dall'elenco, fino a 150 punti. Questo è il tuo sprint.
Non essere mai tentato di spremere più di quanto si adatterà. L'eccessiva promessa fa male a lungo termine a tutti, incluso te.
Dovrai tenere conto delle dipendenze qui. Ad esempio, l'installazione ambientale deve ovviamente essere inclusa nel primo sprint. Questo è in realtà relativamente facile da fare quando tutti sono presenti. Hai 6 cervelli nella stanza, tutti dicendo "questo dipende da questo", ecc. Puoi quindi mescolare le carte per dimostrare le dipendenze.
Una volta che hai lo sprint, non è possibile aggiungere nulla ad esso, è bloccato per i 5 giorni. Il creep stresserà la squadra, danneggerà il morale e rallenterà tutti. Alla fine, il creep bloccherà un progetto. Come capo squadra devi proteggere la tua squadra dallo scorrimento delle funzionalità. Se arriva una nuova richiesta di funzionalità, deve essere aggiunta allo sprint successivo. Se il prossimo sprint è già pieno, qualcos'altro deve essere eliminato.
Non essere mai tentato di spremere in extra. Una promessa eccessiva ti dà un cliente felice di circa 1 giorno, seguito da 4 giorni di stress del team e, probabilmente, molti clienti infelici quando il team non riesce a consegnare in tempo.
Adesso vai.
Distribuisci le carte, chiedi a chi vuole fare cosa. Hai piena visibilità su ciò che viene fatto e puoi contare i punti che scorrono fino a zero. Avere uno standup all'inizio di ogni giorno in modo che tutti sappiano chi sta lavorando su cosa e cosa è stato fatto.
5 o 6 sviluppatori decenti e motivati che lavorano insieme come unità su obiettivi gestibili chiaramente definiti possono raggiungere una quantità piuttosto grande di cose in uno sprint di 5 giorni.
Mantieni visibilità
Assicurati che tutti possano vedere qual è lo stato del progetto. Bluetack tutte le carte sul muro. A sinistra ci sono carte che non sono ancora state lavorate. Sulla destra sono fatte le carte.
Quando uno sviluppatore sta lavorando su una carta, la toglie dal muro e la mette sulla propria scrivania. Ciò mantiene la visibilità e impedisce alle persone di calpestarsi troppo.
Esistono alternative tecnologiche alle schede, ma niente di meglio che avere un enorme display di carta dello stato del progetto sul muro.
Se possibile, avere tutti nella stessa stanza per la durata del progetto. Avere le parti interessate il più possibile, idealmente ogni giorno.
Bruciare
Puoi rappresentare graficamente i tuoi punti avanzando verso lo zero su un grafico di burndown. Se la tua linea di migliore adattamento attraversa lo zero prima di raggiungere il limite di tempo, sei probabilmente sulla buona strada. In caso contrario, potrebbe essere necessario informare il cliente ora, prima di avvicinarsi troppo alla scadenza.
Se fallirai, fallisci presto.
Puoi eseguire un burndown utilizzando il software, ma preferisco solo un grosso pezzo di carta sul muro. Disegna e scrivi dappertutto.
Test automatizzati
Quando hai più sviluppatori che lavorano sulle stesse cose allo stesso tempo, probabilmente si romperanno il codice a vicenda di volta in volta. La comunicazione e la visibilità aiutano in questo, ma probabilmente vorrai introdurre alcune tecnologie per aiutarti a trovare i problemi.
Il test unitario è il processo di scrittura dei test per ogni singola parte del tuo codebase (idealmente ogni metodo). I test unitari devono essere eseguiti spesso, con ogni salvataggio, se possibile. Ci sono molti strumenti che possono aiutarti in questo, ad esempio Karma o Rspec.
I test end-to-end prevedono il test del progetto nel suo insieme, trattando gli interni come una scatola nera. Basare questi test sui requisiti aziendali di alto livello, ad esempio: "L'utente può iscriversi" o "L'utente può visualizzare un elenco di articoli". Il goniometro è un bell'esempio di un framework di test basato sul web end-to-end.
Ci sono interi libri scritti sui test, ma avere almeno alcuni test di accettazione in atto può aiutare a assicurarsi che nulla si rompa mentre lavori al tuo progetto.
Evitare il debito tecnico e fare il proprio dovere
Il debito tecnico è un concetto che descrive cose che dovranno essere ripulite in seguito. Una fonte comune di debito sono le caratteristiche che sono state contrassegnate come completate, ma che non sono mai state "completate". Una funzionalità completata viene archiviata in Git, è stata approvata dalle parti interessate e ha un test.
Non disattivare le funzionalità fino a quando non sono state completate. Non massaggiare mai il grafico. Ancora una volta, questo a lungo termine fa male a tutti, incluso te.
Questo è uno dei motivi per cui inizialmente citiamo solo 6 punti per sviluppatore, al giorno. Il lavoro fatto richiede un lavoro extra, ma è fantastico e dà una spinta alla squadra.