Nello sviluppo Agile, chi possiede il software "caratteristiche" e come gestire lo sviluppo?

8

Alcuni team di sviluppo della mia azienda stanno passando a pratiche di sviluppo Agile e il lavoro dei loro sviluppatori sembra essere in diminuzione per discutere e programmare minuzie su funzionalità software banali a causa di cicli di iterazione di due settimane. E anche a causa della mentalità di "qualsiasi sviluppatore può correggere qualsiasi bug". Di recente mi sono unito a una di quelle squadre, trasferendomi da un'altra squadra nella stessa azienda ...

Ritengo fermamente che gli sviluppatori debbano possedere le loro funzionalità software dall'inizio alla fine (progettazione) fino alla fine (implementazione e test delle unità). Agile sembra andare contro questo pensiero. C'è qualche verità nella mia percezione o sto semplicemente vivendo una cattiva implementazione di Agile?

Durante le nostre iterazioni di due settimane, alle persone vengono assegnate arbitrariamente nuove piccole funzionalità e correzioni di errori, a seconda del loro carico di lavoro durante quel ciclo. Nessuno sembra possedere la responsabilità delle principali funzionalità del software. Trascorriamo ore stupide su cose banali, come aggiungere un pulsante singolo a una finestra di dialogo durante un'iterazione di due settimane, completa di una trama, scrums giornalieri, revisione del codice, ecc.

Quindi nei progetti Agile, come si gestiscono le funzionalità più grandi? Chi ha la responsabilità: singoli sviluppatori o tutto il team? Come si estrae da minutia e si concentra su obiettivi a lungo termine? Qualsiasi feedback sarebbe prezioso.

    
posta Kavka 11.02.2013 - 05:38
fonte

6 risposte

12

Se pensi che sarebbe di aiuto agli sforzi del team, non dovresti esitare ad ammorbidire "qualsiasi sviluppatore in grado di correggere qualsiasi" mentalità " di bug che vedi come creare problemi.

La pratica di Collective Code Ownership , talvolta chiamata anche Shared Code , è un principio fondamentale in molti aspetti dello sviluppo Agile, ed è probabilmente quello che stai vivendo:

Da extremeprogramming.org :

Collective Ownership encourages everyone to contribute new ideas to all segments of the project. Any developer can change any line of code to add functionality, fix bugs, improve designs or refactor. No one person becomes a bottle neck for changes.

Da c2.com :

ExtremeProgramming considers code to belong to the project, not to an individual engineer. As engineers develop required functionality, they may browse into and modify any class. They are responsible for keeping all the UnitTests running (and writing new ones for new functionality). They take on the same integrity-preserving duties as the class owner in a CodeOwnership situation.

Working in this mode lets a responsible team move quickly to add new functionality while keeping responsibility in the right objects. CodeOwnership creates dependencies and bottlenecks when implementing UserStories. We avoid code ownership, because it conflicts with commitment from the PlanningGame. ("Code is nothing, stories are everything!")

Ci sono alcuni indubbi benefici su Collective Code Ownership . Tuttavia, non sei il primo a notare le mancanze in questo approccio . Nessuno diverso da Martin Fowler descrive un approccio che si trova tra gli estremi di Strong Code Ownership (dove gli individui "possiedono" i loro moduli) e Collective Code Ownership . Descrive ciò come Proprietà del codice debole :

Weak code ownership is similar [to Strong Code Ownership] in that modules are assigned to owners, but different in that developers are allowed to change modules owned by other people. Module owners are expected to take responsibility for the modules they own and keep an eye on changes made by other people. If you want to make a substantial change to someone else's module it's polite to talk it over with the module owner first.

Nello stesso articolo, prosegue:

The choice between weak and collective ownership has more to do with the social dynamics of the team. Both seem to work, and fail, equally well. Personally I prefer the dynamics of a collective code ownership team - particularly in the context of Extreme Programming.

La linea di fondo è che per aderire veramente ai principi Agile, il team dovrebbe fare ciò che porta a un codice funzionante di buona qualità. Se ciò significa allentare la presa su Collective Code Ownership , allora non c'è niente di sbagliato (o anti-Agile) a riguardo.

    
risposta data 11.02.2013 - 17:02
fonte
4

Per rispondere alla tua domanda, proverò a fornire una descrizione di come gestiamo le situazioni menzionate nella tua domanda:

Usiamo il framework Scrum in Agile. Le sessioni Sprint Planning e backlog grooming aiutano il nostro team ad avere storie suddivise in modo relativamente corretto.

Nel complesso una squadra nel suo insieme è responsabile per il risultato degli impegni per uno sprint (tutte le storie). Hanno successo o falliscono come una squadra. Quindi la squadra nel suo complesso influenzerebbe il modo in cui il lavoro deve essere gestito per portare a termine il lavoro nello sprint.

Le carte storia prese da uno sviluppatore (negli standup) diventano la responsabilità dello sviluppatore di farlo e firmarlo, pronto per il rilascio alla fine dello sprint. Tuttavia, la squadra dovrebbe utilizzare gli standup giornalieri per vedere se qualcuno sembra stia lottando con la sua storia e poi procedere per aiutare lo sviluppatore a completare i suoi compiti in sospeso.

Nel nostro caso, con Scrum, se ci viene dato qualcosa che non faceva parte dell'impegno Sprint originale, lo aggiungiamo come "lavoro non pianificato" e i proprietari dei nostri prodotti sanno che lo sforzo non pianificato aggiunto potrebbe comportare il mancato rispetto degli impegni originari incontrato. Abbiamo anche una struttura piatta nel team, in modo che nessuno possa svolgere un ruolo di gestione e tutti sono quindi motivati a non lasciare che la squadra fallisca poiché tutti sono ugualmente responsabili del lavoro.

    
risposta data 11.02.2013 - 08:05
fonte
3

Il proprietario del prodotto possiede la parte cosa . È incaricato di decidere quali articoli del Product Backlog sono più prioritari rispetto ad altri articoli ed è responsabile di consegnare il prodotto in base alle risorse disponibili complessive in tempo .

Il team di Scrum (incluso proprietario del prodotto e scrum master) è responsabile della modalità . Dovrebbero decidere come gestire la squadra, condividere le conoscenze, essere auto-organizzati, incontrarsi quotidianamente (stand-up quotidiano), rivedere se stessi (riunione retrospettiva), avere risorse interfunzionali, ecc.

Questa idea è lontana dalla proprietà di una funzione, in quanto gli stakeholder possiedono quelle funzioni, non io e te bro.

    
risposta data 11.02.2013 - 16:21
fonte
1

Il modo in cui lo faccio, con un basso livello di dolore, è che ogni sviluppatore sia responsabile di una carta sulla scacchiera, da quando viene prelevata dall'elenco TODO fino a quando non si sposta su FATTO. Il proprietario della funzione, per quanto riguarda la funzionalità, sono Team Lead, SME e BA. Ogni team ha un responsabile del team (esperto tecnico e avvocato), un esperto in materia e un analista aziendale.

In genere il BA è il ragazzo / ragazza che invia le domande dallo sviluppatore che sta attualmente lavorando su una carta. Lavoriamo tutti nella stessa stanza, quindi se il Team Lead (io), il BA o lo SME sentono qualcosa con cui non siamo d'accordo, saltiamo dentro e portiamo lo sviluppatore in una stanza per i dibattiti per discuterne ulteriormente. In genere, noi tre porteremo i membri degli altri tre se riteniamo che possano essere utili alla discussione.

Certo, a volte ci sono perdite di tempo mentre discutiamo di un problema, ma generalmente arriviamo rapidamente a una buona soluzione.

In definitiva è il Team Lead che firma gli elementi arretrati come pronti per lo sviluppo ed è il team leader che ha l'ultima parola quando è necessario prendere una decisione ed è responsabile se l'implementazione è "sbagliata". (Non chiedere informazioni sul gioco di colpa "sbagliato": /).

Tutti gli altri sviluppatori che ascoltano la conversazione sono incoraggiati a offrire input e tutti i membri del team hanno inserito durante la vetrina alla fine dello sprint, quando le nuove funzionalità sono state dimostrate.

tl; dr (per noi): il capo squadra possiede le caratteristiche e un singolo sviluppatore lavora su una scheda funzione (o bug, miglioramento, debito tecnico, ecc.) dall'inizio all'accettazione tramite il test squadra).

    
risposta data 11.02.2013 - 06:57
fonte
0

Il primo problema che vedo è che il processo di stima sta andando un po 'largo. Sì, gli sviluppatori dovrebbero avere voce in capitolo su quanto lavoro dovrebbero aspettarsi. No, questo non significa che l'aggiunta di un singolo pulsante a un modulo Web sia ora una storia di due sviluppatori-settimana (ma molti punti equivalgono al processo di stima della tua azienda). Se questo è lo stato attuale delle cose, allora tu, come project manager, dovresti fare un secondo tentativo.

In secondo luogo, sento "dall'inizio (progettazione) alla fine (implementazione e test delle unità)" e il primo pensiero che viene in mente è "stai sbagliando". I tuoi test unitari fanno parte del tuo lavoro di progettazione come team di sviluppo / sviluppo e dovrebbero accadere per primi; prendi i requisiti di base, distillali in una semplice "lista di controllo" di "If ... When ... Then ..." - digita le frasi e poi converti quelle frasi in una serie di test di base che affermano che il programma incontra quelli asserzioni e quindi i requisiti. Ciò accade prima di scrivere una riga del codice di produzione che soddisfi le asserzioni dei test. Se i tuoi test unitari arrivano per ultimi, dopo che hai già implementato il software, perdi diversi aspetti chiave del test dell'unità; in generale, i tuoi sviluppatori non possono "programmare in verde", fornendo così una definizione minimalista di "fatto" che incoraggia implementazioni più leggere (ma mantenibili) che fanno ciò che il cliente vuole senza sprecare lavoro facendo più cose che il cliente non vuole ancora (e potrebbe anche non essere disposto a pagare T & M perché, non è quello che ti ha chiesto di fare).

Per quanto gli sviluppatori "possiedono" le loro funzionalità, c'è un sì e un no. Prima di tutto, uno scossone piuttosto comune da parte di "team auto-organizzanti" è una tendenza per gli sviluppatori di andare in coppia o in tre e lavorare su cose che sanno meglio. Supponendo che tu abbia un buon set completo di competenze sviluppatore in modo tale che il team possa coprire tutto il lavoro da svolgere in ogni iterazione in questo modo, puoi semplicemente lasciare che questo accada; è una buona cosa per velocità, dato che gli sviluppatori restano concentrati e hanno familiarità con le aree del codebase in cui hanno lavorato dall'iterazione all'iterazione.

Tuttavia, uno sviluppatore che possiede una caratteristica per la vita è una mentalità pericolosa, perché abbassa il "numero di camion" della tua squadra (definito francamente come "quante persone potrebbero essere investite da un camion prima che la squadra non potesse funzionare , visto lo scenario peggiore di persone specifiche colpite e la conseguente perdita di conoscenza.) Se il tipo a cui è stata assegnata la funzionalità "File Import" del software e lo ha posseduto per 2 anni va in vacanza per tre settimane, prende FMLA estesa vattene, cambia lavoro o, in caso estremo, viene investito da un camion e muore, ora non hai nessun altro che conosca quella funzione perché quell'area del codebase è stata l'esclusiva per un ragazzo da anni. altrimenti si familiarizza con questo particolare pezzo del codebase, perderai velocità significativa e ti aprirai anche ad altri problemi con i difetti, dato che il nuovo ragazzo che ha appena familiarità con il funzionamento del codice base ora può rimanere ignobilmente igno Una sfuriata di cose che può e non può cambiare al suo interno.

Invece, dovresti cercare di coltivare una divisione del lavoro che mantenga il tuo numero di camion almeno 2 o superiore, e in una squadra più grande (una dozzina o più) più vicina a 3 o 4. In questo modo se un ragazzo non può fare il lavoro, per qualsiasi motivo, ci sono molte altre persone che possono entrare. A volte, i team si scuotono naturalmente in questo modo, specialmente se si introducono alcune tecniche XP come la programmazione in coppia o in stile dojo (un ragazzo scrive in un nuova asserzione basata su requisiti che il codice non soddisfa, il prossimo ragazzo poi codifica per passare quel test, quindi aggiunge un'altra richiesta di requisito che fallisce e la trasmette). Per definizione, in queste situazioni, hai più occhi che guardano il codice, lo sviluppano, familiarizzano con esso.

Nel complesso, l'idea di Agile è promuovere lo sviluppo "leggero". La tua squadra sembra impantanarsi in minuzie di processi e documentazione, quando l'attenzione principale, come per il Manifesto Agile, dovrebbe essere sui membri del team e le loro interazioni e, naturalmente, sul funzionamento, codice funzionale. I processi inerenti ad Agile sono un mezzo per un fine e non c'è un modo per seguire Agile; anche i framework Agile primari come SCRUM sono malleabili in base alle esigenze di un'azienda, di un team e persino di giorno in giorno (assicuratevi solo di tenere a mente le idee di base dei valori forniti da questi processi quando apportate tali modifiche).

    
risposta data 11.02.2013 - 21:00
fonte
0

Il processo Agile è definito dal team per il team in base alle linee guida e può variare da un team all'altro. Nella maggior parte dei casi, non ho visto due team diversi che rispecchiano lo stesso processo nella mia esperienza professionale. Fondamentalmente l'idea è quella di avere lo sviluppo più efficiente, che in alcuni casi significa che persone diverse lavorano su funzionalità nella stessa base di codice e in altri casi una persona è il proprietario delle funzionalità dall'inizio fino al completamento della funzionalità.

Le caratteristiche sostanzialmente più grandi (chiamiamole storie degli utenti) possono essere suddivise in storie di utenti più piccole e ancora una sola persona può essere proprietaria della funzione che diffonde tali storie utente attraverso diversi sprint. Di conseguenza, la persona può essere proprietaria di una funzione e non eseguire tutto il lavoro per la funzione. Per es.

Scenario:

  • Una funzione di grandi dimensioni stimata in 6 settimane (3 sprint).
  • La funzione è suddivisa in diverse storie di utenti ciascuna ripresa a due giorni.
  • Le storie degli utenti includono sviluppo di funzionalità, test di unità, interazione test, integrazione (con altre funzionalità) e test di integrazione

Il team è tecnicamente il proprietario della funzione, ma uno sviluppatore può comportarsi come tale.

  • Lo sviluppatore scrive la funzionalità
  • Lo sviluppatore scrive i test unitari
  • Un tecnico di qualità scrive l'automazione
  • Un altro dev garantisce l'integrazione

In questo scenario ci sono almeno 3 persone (potremmo avere più di un QE in servizio) responsabili della consegna delle funzionalità, ma lo sviluppatore è proprietario e, in un certo senso, guida la funzionalità. Questo, ovviamente, richiede una maggiore dedizione a questa caratteristica specifica da parte dello sviluppatore, ma non è in alcun senso al di fuori dello scope Agile e allo stesso tempo abbiamo un singolo proprietario di funzionalità.

    
risposta data 11.02.2013 - 13:41
fonte