Ho appena iniziato un lavoro con Scrum e sembra che manchi qualcosa. Sono nuovo di Scrum


23

Il codice è un casino completo di una combinazione di ASP / ASP.NET classico. La mischia consiste nel rattoppare il grande pasticcio o fare aggiunte ad esso. Siamo tutti troppo impegnati a farlo per iniziare una riscrittura, quindi mi chiedo ..

Dov'è la parte in Scrum in cui gli sviluppatori possono avere il potere di dire che basta e chiedere loro di avere il tempo di iniziare la grande riscrittura? Sembriamo in un ciclo infinito di patch del vecchio codice con "Stories".

Quindi le cose non sono gestite da persone non tecniche che sembrano non avere alcuna voglia di spingere per una riscrittura perché non capiscono quanto male sia la base di codice.

Quindi chi è incaricato di realizzare questo grande cambiamento di riscrittura? Gli sviluppatori? Lo Scrum Master?

La strategia attuale è solo trovare il tempo e farlo da soli, senza il più alto-up coinvolte dal momento che sono in gran parte da biasimare per l'attuale caos ci troviamo .. <-inserto rant su persone non tecniche dire alla gente tecniche cosa fare qui ->.


20
Sham agile alza di nuovo la brutta testa ... Molte aziende affermano di essere "agili" e usano "mischia", quando in realtà non lo fanno.
Oded,

4
Non stai facendo Scrum

20
prendi in considerazione la possibilità di stampare un grande poster di questo e posizionarlo sul muro proprio dove i tuoi non tecnici possono vederlo chiaramente: Manifesto per lo sviluppo di software agile a metà arsenale ... mentre gli elementi a sinistra suonano bene in teoria, siamo un'azienda aziendale, e non c'è modo di lasciar andare gli articoli sulla destra
moscerino del

12
link obbligatorio al blog di Joel: joelonsoftware.com/articles/fog0000000069.html
marco-fiset

8
"<-inserisci che le persone non tecnologiche dicono alle persone tecnologiche cosa fare qui->" , il management dovrebbe dire al 100% alle persone tecnologiche cosa fare, ecco perché sono dirigenti e responsabili dell'azienda , ecco cosa fanno fare meglio. Quello che il 100% dovrebbe non essere facendo loro sta dicendo come farlo, tecnologia la gente dovrebbe decidere su come a tecnicamente realizzare ciò che è stato chiesto di fare. Nient'altro è ingenuo completo !

Risposte:


7

Non sono sicuro del perché sia ​​così difficile per le persone. Il suo caso aziendale è proprio qui:

We seem in an endless loop of just patching old code with 'Stories'.

Il tempo degli sviluppatori è denaro. Un sacco di soldi. Ho lasciato un'azienda che aveva pianificato di rinnovare la propria interfaccia utente più di un anno fa e speravo che l'adozione della mischia li avrebbe aiutati a smettere di girare le ruote. Quello che è successo? Lo stesso vecchio 'stesso vecchio'. Hanno continuato a sfruttare nuove funzionalità e il "debito tecnico" non ha avuto alcun caso commerciale anche se metà del codice che abbiamo scritto è diventato insignificante con ogni iterazione a causa del fatto che la base di codice sottostante è un disastro completamente obsoleto. Non è cambiato nulla sul loro front-end da quando me ne sono andato, e sono stato portato al solo scopo di rinnovarlo completamente. Nei due mesi in cui ero lì, non ho toccato una leccata di CSS o JavaScript. Stavo solo scherzando con HTML e alcuni antichi sistemi di template Java alla fine degli anni '90.

La mia risposta? Fai quello che puoi, ma se gli altri sviluppatori hanno già rinunciato e lavorano in ritardo per raggiungere gli obiettivi dello sprint piuttosto che affermare scadenze più pratiche e insistendo sul fatto che il debito tecnologico è in realtà un problema di blocco, prendi il peggio e inizia a cercare un nuovo lavoro adesso. I tuoi sviluppatori non sono in grado o non sono autorizzati a comunicare le loro preoccupazioni o gli affari sono troppo! @ # $ Ing miopi per capire quanti soldi stanno incazzando.

Ignorare questi problemi SEMPRE costa di più a lungo termine. E non un po 'di più, ma MOLTO di più. Non è solo una ferita al torace che riguarda i tempi di sviluppo, ma inevitabilmente ridurrà i livelli di talento in quanto gli sviluppatori che conoscono meglio e hanno altre opzioni eviteranno la tua azienda come la peste. Il mio attuale capo è uno sviluppatore E il proprietario dell'azienda. Ci sono cose che non riscriveremo per concentrarci su altre priorità, ma quando qualcosa ha davvero bisogno di un refactoring a causa della coerenza dei tempi, ottiene un refactoring adeguato. E i risultati sono ovvi. La modifica e l'aggiunta di nuovi elementi diventa più facile e veloce per molteplici fattori. Ciò che una volta può aver impiegato ore può richiedere minuti con un'architettura adeguata. Alle imprese non piace ascoltarlo, ma vale la pena mettere le cose in sospeso per quello.

Scrum è un fallimento in ambienti in cui gli sviluppatori non hanno molta influenza, IMO, perché è troppo facile per i tipi di business voler ignorare la manutenzione e gli aggiornamenti a favore dei punti elenco che possono inserire nelle loro liste di "iniziative di successo" quando arriva il tempo di valutazione. Favoriranno sempre le loro pelli e il potenziale di promozione a favore del lungo termine, anche quando le morde costantemente nel culo per ignorare anche questi problemi.

Scrum è anche un settore motivato dal profitto e poi alcuni. Le aziende pagano molti soldi per l'addestramento alla mischia. Le persone in cerca di adozione dovrebbero prestare attenzione a chi viene commercializzato e quanto realistico sarà davvero all'interno della propria cultura.

Indipendentemente da ciò, se ti interessa davvero dello sviluppo, una base di codice schifosa, la gestione con la cera nelle orecchie e gli sviluppatori senza spine è una ricetta per la miseria e un ambiente che farà molto poco per migliorare la tua abilità in qualsiasi aspetto utile. Non esitate a iniziare a mettere in moto GTFO prima di aver effettivamente scoperto se i vostri sforzi per risolvere il problema stanno effettivamente ripagando.


Per quanto riguarda il refactoring, trovo strano che le persone non possano "interiorizzare" che il refactoring sia una parte costante di tutto lo sviluppo, non è qualcosa su cui ci si possa basare quando il problema è così grave che non c'è molto che si possa fare.
nicodemus13,

1
Oppure non hai test unitari. :) Uno dei principali vantaggi del test unitario è che ti consente di eseguire il refactoring in tutta sicurezza. Il problema più grande con le buone pratiche è lo stesso di tutto: richiede disciplina e generalmente le persone preferiscono essere pigre.
nicodemus13,

2
Quello o sono ancora un altro dono della folla estrema di codici che può essere facilmente trasformato in uno strumento che consente comportamenti scorretti nelle mani sbagliate. I test automatizzati sono utili nei punti chiave, ma preferisco l'architettura del suono e la scrittura su un'interfaccia piuttosto che un test.
Erik Reppen,

1
Direi che è lo stesso per qualsiasi cosa, personalmente scrivo i test per aiutare a definire l'interfaccia.
nicodemus13,

1
Poi arriva il dolore di tutti i kludges da rimettere in sesto poiché ci sono quelle piccole eccezioni che potrebbero non essere facilmente individuate dall'analisi iniziale.
JB King,

33

Se dovessi davvero fare Scrum, di cui dubito, il Product Owner sarebbe responsabile di decidere in merito a una riscrittura. Il più delle volte una riscrittura non è una buona idea, tra l'altro, perché non produce nuove funzionalità, introduce solo nuovi bug.

http://blog.objectmentor.com/articles/2009/01/09/the-big-redesign-in-the-sky
http://www.joelonsoftware.com/articles/fog0000000069.html

Espandere "riscrivere non è una buona idea":

È quasi sempre meglio provare un miglioramento graduale. Come Jarrod Robertson ha scritto in un commento, trova un modulo che necessita di miglioramenti diventa l'esperto per quel modulo e scrivi una storia per il prossimo sprint per migliorare quel particolare modulo. Spiega al proprietario del prodotto perché quel modulo ha bisogno di lavoro.


8
Se hai tutta l'esperienza e la saggezza che affermi, fai un passo avanti e sii il ragazzo che capisce quel modulo in errore, diventa l'esperto su di esso e risolvilo, quindi metti insieme un caso aziendale per riscriverlo, perché poi sarà l' esperto su quel modulo.

3
Alcuni pasticci devono essere ripuliti. Citando gli articoli di Joel e affermando che le riscritture raramente scompaiono senza statistiche che sarebbero comunque dubbie (perché chi si vanta delle riscritture di successo?) Non cambia questo.
Erik Reppen,

3
@ErikReppen Quindi quando il tuo salotto è disordinato, fai a pezzi la casa e ne costruisci una nuova?
EricSchaefer,

4
Se leggi i suoi commenti non sta parlando del soggiorno. Probabilmente è difficile dire dove inizia una stanza e un'altra finisce. E tutta la casa è in fiamme.
Erik Reppen,

5
Whoa lì, cowboy. Prima di fare solo una dichiarazione generale su "riscrivere non è una buona idea", penso che dobbiamo qualificarlo con la verità che passare alle nuove tecnologie e adattarsi ai tempi è essenziale per la sopravvivenza IT della tua azienda. Se non adotti le tecnologie più recenti (si spera migliori) e i vantaggi che offrono, i tuoi concorrenti lo faranno. Questo è vero per la tecnologia in generale. Il modello T era un veicolo perfettamente valido, ma grazie alla concorrenza e all'adozione di nuove tecnologie, le auto sono state "riscritte" molte volte nei veicoli migliori che guidiamo oggi.
carne

18

Sarò davvero schietto ...

  • Sei responsabile degli sviluppatori in questo lavoro?
  • Sei il capo progetto?
  • Quanta "partecipazione" detengono gli sviluppatori nel progetto?
  • Qual è la tua giustificazione commerciale per una riscrittura?
  • Cosa c'è nella base di codice che la rende del tutto inutile e irrecuperabile?

Hai dichiarato di aver appena iniziato un lavoro, eppure sembra che tu sia già un maestro della situazione lì. Forse ho frainteso l'intento della tua domanda, ma ho l'impressione che tu abbia inserito un lavoro in cui riscontri una serie di problemi e sei passato alla conclusione più semplice in cui il codice è rotto e l'unica via da percorrere è una riscrittura, ma hai davvero considerato il costo per il tuo datore di lavoro per farlo?

Con qualsiasi base di codice esistente, indipendentemente dallo stato in cui si trova, il proprietario avrà di solito un investimento considerevole nei prodotti rappresentati dal codice. Ci sono costi sia diretti che indiretti associati alla base di codice e una riscrittura è spesso l'ultima cosa che vuoi fare come sviluppatore di software, poiché rischi di svalutare le tue risorse di codice e ottenere così un rendimento inferiore su tutti i tuoi precedenti sforzi.

Prendi il sistema operativo di Windows come esempio. Con ogni nuova versione creata, c'è stato un grosso pezzo di codice portato avanti dalla versione precedente. A volte, intere librerie e API vengono trascinate in avanti attraverso diverse generazioni di SO. Perché? Perché gli sviluppatori sanno che questi elementi funzionano, sono stati testati, sono stati riparati e riparati per prevenire problemi di sicurezza e memoria e perché sono costati un sacco di soldi per entrare in quello stato. Nessuno vuole buttare via il codice di lavoro quando li guadagna, anche se i costi di manutenzione sono relativamente alti, i costi per iniziare da zero saranno sempre più alti e, in un'azienda come il caso di Microsoft, hanno miliardi in banca che consentire loro di iniziare dall'inizio se lo desiderano, ma non t perché vogliono massimizzare il loro ritorno dal loro investimento. Il tuo datore di lavoro non è diverso da Microsoft, tranne per il fatto di avere miliardi in contanti da lanciare a un progetto.

Quindi il codice è un disastro e sembra che ci siano problemi di comunicazione e di confine tra le varie aree dell'azienda. Cosa puoi fare tu o i tuoi colleghi al riguardo?

Un'opzione è semplicemente continuare come è stata la squadra e sperare in un miracolo in futuro. Probabilmente non è una buona idea e probabilmente aumenterà solo la tua frustrazione e stress.

Un'opzione migliore è semplicemente fare una pausa e svolgere il proprio lavoro, ma come parte di questa ricerca di opportunità per aggiungere test per supportare quelle aree di codice che sembrano essere le più fragili, quindi rifattorizzarle fino a renderle più stabili. Avrai un momento più facile nel formulare un argomento convincente per migliorare gli investimenti dell'azienda invece di discutere semplicemente per buttare via tutto.

Un'opzione ancora migliore è quella di essere organizzati come una squadra, e per assicurarsi che qualcuno si schieri dalla parte dell'anzianità sufficiente da poter fare un buon caso per consentire alla squadra una maggiore flessibilità per pianificare il tempo per migliorare la base di codice. Non mi interessa quanto sia impegnata un'azienda o quanto rigido sia il programma, ci sono sempre occasionali "pause" nell'attività che possono essere utilizzate per spremere in un miglioramento o due. È ancora meglio, tuttavia, se è possibile apportare miglioramenti durante il completamento di altre attività. Se fossi in me, mi sarei avvicinato a un manager e li avrei introdotti ai concetti in alcuni dei libri canonici che gli sviluppatori di software leggono. Codice pulitoè probabilmente quello di cui la tua squadra ha più bisogno. Pianta alcuni semi su come migliorare il codice e fornisci alcuni esempi di cosa intendi. Un buon manager vedrà il valore di aggiungere miglioramenti incrementali al codice, specialmente se sei in grado di descrivere il concetto di debito tecnico . Aiuta il tuo team leader o manager a creare un buon business case per migliorare il codice e avranno una motivazione migliore per agire su di esso.

Inoltre, non è sufficiente dire "il codice è disordinato". Devi incoraggiare i tuoi colleghi a esercitarsi sempre nella pulizia del codice e a utilizzare una tecnica di codifica pulita per incoraggiare un po 'di riordino mentre procedi. Ho un piccolo poster che stampo e appendo al muro del mio ufficio ogni volta che intraprendo un nuovo lavoro. Dice "Cerca sempre di lasciare il codice un po 'più bello di quello che hai trovato". Accanto ad esso ne aggiungo un altro che dice "I gigli non hanno bisogno di essere dorati". Entrambi servono a ricordarmi che dovrei sempre cercare di migliorare ciò che trovo, ma evitare semplicemente di placcare in oro un problema con un altro. Le riscritture di massa sono spesso il peggior tipo di "doratura", perché spesso vengono eseguite per ragioni sbagliate. Sicuramente una versione del prodotto completamente nuova potrebbe essere giustificabile ad un certo punto,


No. Non sono responsabile. Sono uno sviluppatore che ha codificato 12 anni in modo professionale e 7 anni in .NET. Sono stato in giro con molti contratti e dopo un po 'puoi avere un'idea della qualità del codice. Quanto 'Puntata'? Non sono sicuro di cosa tu voglia dire. Possiamo continuare a rimediare riparando il vecchio ASP CLASSICO che ora è estremamente fragile e impiegare 10 volte più tempo da fare che se questi cambiamenti facessero parte di una buona arcitettura moderna. La giustificazione commerciale è che il sito ora si sta bloccando nella produzione a causa di un modulo che nessuno sembra capire a causa dell'elevato turnover
punkouter,

Non credo tu capisca quanto sia grave questa base di codice. Inoltre, non si tratta di scienza missilistica. Questo è CRUD 101. Visualizza un modulo, che consente a un utente di compilarlo, convalidare e quindi creare alcuni report e PDF dai dati. Questo è fondamentalmente .. Ma per oltre 10 anni il codice è stato frammentato in così tante parti è terribile. Ho fatto parte di circa 20 progetti negli ultimi 12 anni e questa deve essere la peggiore raccolta di codice che ho visto che viene effettivamente utilizzato nella produzione ... Vorrei
poterti

Quello che sto facendo per i principianti è trovare le persone che fanno parte del team che hanno una certa passione per la programmazione e sono interessate a far parte finalmente di ottenere questo giusto. Non è facile trovare quelle persone a causa di ... brucefwebster.com/2008/04/11/…
punkouter

16
@punkouter: non credo che tu capisca il punto qui esposto; Il codebase essendo "cattivo" non è un caso aziendale per una riscrittura. Avere passione per la programmazione e voler ottenere le cose giuste non è un caso aziendale per una riscrittura. Bug e interruzioni di produzione costosi e impiegando mesi per implementare nuove funzionalità banali ma importanti: QUELLE forniscono un caso aziendale per una riscrittura.
Michael Borgwardt,

1
@punkouter Anche il tuo collegamento a una descrizione del fenomeno "Mar Morto" è particolarmente appropriato. Non ha alcun valore per l'azienda perdere conoscenza attraverso l'attrito e di grande valore recuperare ciò che può. Un investimento del tuo tempo per evitare una riscrittura potenzialmente costosa e non necessaria ha un valore commerciale maggiore rispetto alla perdita di conoscenze e competenze. Incoraggiare le migliori pratiche di assunzione e affrontare la sfida di risolvere il problema e migliorare il sistema è un'opportunità per guadagnare un po 'di complimenti e diventare un bene prezioso per il tuo datore di lavoro.
S.Robins,

13

Ecco la definizione ufficiale dello Scrum Development Team dalla Scrum Guide ufficiale . Metto l'accento sulle parti che ti riguardano direttamente:

Il team di sviluppo è composto da professionisti che svolgono il lavoro di fornitura di un incremento potenzialmente rilasciabile del prodotto "Fatto" alla fine di ogni Sprint. Solo i membri del team di sviluppo creano l'incremento. I team di sviluppo sono strutturati e abilitati dall'organizzazione per organizzare e gestire il proprio lavoro . La sinergia risultante ottimizza l'efficienza e l'efficacia complessive del team di sviluppo. I team di sviluppo hanno le seguenti caratteristiche:

  • Si auto-organizzano. Nessuno (nemmeno Scrum Master) dice al team di sviluppo come trasformare il portafoglio ordini in incrementi di funzionalità potenzialmente rilasciabili;

  • I team di sviluppo sono interfunzionali, con tutte le competenze in team necessarie per creare un incremento del prodotto;

  • Scrum non riconosce titoli per i membri del team di sviluppo diversi dallo sviluppatore, indipendentemente dal lavoro svolto dalla persona; Non ci sono eccezioni a questa regola;

  • I singoli membri del Team di sviluppo possono avere competenze specializzate e aree di interesse, ma la responsabilità appartiene al Team di sviluppo nel suo insieme; e,

  • I team di sviluppo non contengono sotto-team dedicati a domini particolari come test o analisi di business.

Il team di sviluppo è quindi responsabile del proprio disordine e dovrebbe affrontarlo da solo, senza dover chiedere a nessuno al di fuori del team.

Includi un tempo tecnico di correzione del debito in ciascuna delle tue stime future e assicurati che la qualità del software che fornisci sia di prim'ordine.

Se devi davvero eseguire una riscrittura completa, devi affrontare il problema in Scrum Restrospective. Il Product Owner può eventualmente annullare il progetto e avviarne uno nuovo. Il Product Owner è anche l'unico in grado di annullare uno sprint.


8
Il team è responsabile del proprio pasticcio, ma non può scegliere la priorità del debito tecnico rispetto alle nuove funzionalità. È il proprietario del prodotto a decidere. È solo che, una volta che l'OP ha deciso la priorità dell'arretrato, il team può decidere come consegnarlo. Possono dire "non possiamo fornire la funzione X senza prima refactoring Y" ma non possono dire "no, scusa, non aggiungeremo nuove funzionalità fino a quando non la riscriveremo da zero".
Bryan Oakley,

6
@BryanOakley: riscrivere da zero non è ciò che suggerisco. Suggerisco di ridurre progressivamente il debito tecnico mentre il team di sviluppo lavora sulle aree interessate. E suggerisco anche che stimino di conseguenza.

1
È così buono, ma se avessimo bisogno di nuovi server, nuovi database, nuovi software per consentire a noi sviluppatori di disporre di tutti gli strumenti necessari per eseguire la riscrittura? E come inizia la riscrittura quando le uniche "Storie" riguardano la risoluzione dei problemi attuali e mai il concetto di consentire una riscrittura?
punkouter,

1
@punkouter: se devi riscrivere, risolvi il problema nella retrospettiva della mischia. Quindi il Product Owner si assumerà la responsabilità di annullare il progetto corrente e avviarne uno nuovo.

5
Non dare per scontato che la decisione di riscrivere sia quella "giusta" solo perché è quella che piace maggiormente agli sviluppatori. A volte c'è un buon motivo commerciale per offrire funzionalità ora, anche se aumenterà il debito tecnico.
DJClayworth,

8

Mentre lo descrivi, devo dire che non vedo nulla che abbia a che fare con SCRUM, o che il tuo team di sviluppo prodotto sia attualmente un problema .

E 'normale

Quello che descrivi è l' entropia normale di una base di codice. Nel tuo caso, la squadra probabilmente è partita più lontano dall'ideale, ma ogni base di codice alla fine diventa una grande palla di fango .

In uno scenario greenfield completamente perfetto , tutto ciò che puoi fare è iniziare più lontano dall'entropia assoluta e avanzare più lentamente.

Sono d'accordo con gli altri, il disordine della base di codice è a causa degli sviluppatori. Sono sicuro che precede l'adozione di SCRUM da molti anni.

Questa non è una decisione tecnica o di sviluppo da riscrivere, è una decisione aziendale.

Non sei al corrente del motivo per cui i proprietari dei prodotti non vogliono una riscrittura. Come sviluppatore pensi che sia necessario, ma c'è davvero qualche caso aziendale per questo?

Se c'è un vero caso aziendale , non solo un gesto della mano; "il codice è un pasticcio legacy che voglio avviare greenfield perché è quello che voglio" , quindi il management dovrebbe sostenere le spese di una riscrittura, considerata la redditività dell'investimento.

Non hai dato un solido business case per una ri-scrittura, solo un rant circa la vostra opinione su come tutti gli altri ha causato questo pasticcio e si non si vuole fare con esso.

Dimostrazione - Il profitto guida le decisioni di business a lanciare software funzionante, non è necessario un certo disturbo ossessivo compulsivo per una base di codice pulita

Se puoi davvero dimostrare la prova , non solo la teoria, ma la prova concreta che spendere Xdollari per una riscrittura greenfield sarà garantito per FARE X * N dollari per il business in Ytempi brevi (dove Nè alto ed Yè breve), potresti ottenere una certa trazione dalla direzione . Questo è un caso altamente improbabile che puoi presentare e dimostrare.

Altrimenti devi solo affrontarlo, questa è la realtà. Contrariamente alle tue affermazioni irremovibili secondo cui non c'è assolutamente modo di andare avanti senza questa grande immacolata riscrittura, scommetterei che tra più di 5 anni la base di codice di cui ti stai lamentando funzionerà e funzionerà da qualche parte fornendo funzionalità e valore a qualcuno molto tempo dopo hai lasciato la compagnia.


1
ciò non significa che non sia responsabilità degli sviluppatori utilizzare internamente alcuni sistemi di controllo della versione , direi che è comunque responsabilità degli sviluppatori prendersi cura di se stessi e dei loro migliori interessi a prescindere. Nel tuo uomo di paglia, quei 200 sviluppatori non hanno fatto quello che dovevano fare, la direzione non si è messa in testa un'arma e ha proibito loro di installare autonomamente il sistema di controllo delle versioni.

3
Le basi di codice disordinato non sono mai un risultato diretto della gestione poiché la gestione non è mai direttamente responsabile della scrittura del codice. È così semplice. La gestione è responsabile di avere e promuovere un ambiente di lavoro non ideale per gli sviluppatori, ma la responsabilità di risolvere problemi come la mancanza di controllo della versione ricade sempre su coloro che svolgono il lavoro effettivo.
Peter Lange,

1
Gli sviluppatori in outsourcing sono un problema di gestione. Le persone all'interno sapevano meglio. Alla dirigenza piaceva fingere di risparmiare denaro buttando via 200 sviluppatori quando in realtà probabilmente avrebbero potuto fare benissimo con 20 competenti. Proprio come molte implementazioni di Scrum che ho visto, la strategia adottata era il prodotto dell'incompetenza e nulla su cui gli sviluppatori che erano in realtà dipendenti dell'azienda avevano alcun controllo.
Erik Reppen,

2
@Erik, senza dire che i manager non devono assumersi la responsabilità di una cattiva base di codice (o di qualsiasi altra decisione sbagliata presa nel loro dipartimento) e che i manager non sono direttamente responsabili della fornitura dell'ambiente in cui lo sviluppatore lavora, come lo scenario che hai descritto. Ma l'unica persona che può essere direttamente responsabile della base di codice è la persona che scrive il codice stesso.
Peter Lange,

3
Vorrei anche aggiungere che è stupido non rendere i tuoi sviluppatori privati ​​degli obiettivi aziendali. Non ho mai capito perché le persone siano così intenzionate a nascondere queste cose alle persone che determinano effettivamente il comportamento del loro prodotto. Conoscere gli obiettivi a lungo termine di un'azienda può infatti informare su come progettare un'app. Inoltre, gli sviluppatori, almeno quelli bravi, risolvono i problemi. Costantemente, risolvono problemi. Alcuni di noi li anticipano e li risolvono in anticipo nelle nostre teste o almeno lasciano aperte le porte giuste nel nostro codice.
Erik Reppen,

7

Di solito sono scettico quando le persone spingono per "grandi riscritture". Ci sono alcuni casi in cui ha sicuramente senso, ma la maggior parte delle volte, quel codice legacy ha valore (in quanto è già in produzione e utilizzato per gli scopi che hanno ispirato la sua creazione). Eseguire una grande riscrittura è in molti casi l'opposto di agile. Quanto tempo ci vorrebbe per portare la nuova versione dell'applicazione a un punto in cui può sostituire in modo sostenibile l'applicazione esistente.

L'approccio che preferirei è quello che Martin Fowler chiama la vite strangolata . Implementare nuove funzionalità (comprese le modifiche alle funzionalità esistenti) utilizzando il nuovo approccio ma utilizzare l'applicazione esistente come traliccio su cui la nuova funzionalità può crescere. Questo ti dà il meglio di entrambi i mondi, non devi fermare tutto mentre la grande riscrittura viene accennata, ma ottieni il vantaggio di scrivere nuovo codice che sfrutta i framework aggiornati. È sicuramente un approccio più difficile rispetto all'avvio pulito e potrebbe non essere così sexy, ma fornisce più valore all'azienda rispetto al dumping di tutto ciò che è lì perché è obsoleto.


Ciò può essere difficile se la base esistente è abbastanza complicata. Sta parlando di sistemi asp.net legacy multipli di autori completamente diversi strettamente accoppiati per lo stesso maledetto sito. I moduli Web da soli sono un mostro e sono sicuro che sia nel mix.
Erik Reppen,

Oh, non ho mai detto che sarebbe la via più semplice ... ma è più appetibile per le parti interessate. Inoltre, passandoci una volta, speriamo che ti assicuri che quando l'ultimo e il più grande di oggi diventano obsoleti di domani, è più facile eliminarlo gradualmente.
Michael Brown,

Sono d'accordo. Ma come ho detto Ive (e non sono sicuro che tutti siano qui). Ciò che emette ora è una raccolta di circa 9 applicazioni web separate, metà ASP classico e l'altra metà forme differenti di ASP.NEt. Tutti usano modi totalmente diversi per gestire l'accesso ai dati ecc. Quindi l'unico modo per fare ciò di cui si parla è falsificare l'interfaccia utente per sembrare che il nuovo codice sia parte del vecchio codice .. quindi sì forse .. ma poi c'è un il database .. Una tabella ha 400 campi!
punkouter,

Sono curioso. Cosa rappresenta quella tabella? Questa è la cosa peggiore di cui ho sentito parlare da quando ho visto i ++; doSomething (i); ripetuto più di una dozzina di volte in un codice che fuoriesce da un tag JSP danneggiato.
Erik Reppen,

5

Dove sono e come lavoriamo questo è ciò che faremmo: scrivere una nuova storia e consegnarla al proprietario del prodotto, che deciderà quindi come stabilire le priorità. Un esempio potrebbe essere: "Come sviluppatore del prodotto X, vorrei riscrivere il codice in quest'area in modo che lo sviluppo futuro sia più efficiente" I criteri di accettazione dovrebbero quindi essere sulla falsariga di: Ri-scrivere / refactoring x in modo che sia meglio in questo modo.

Non conosco la situazione in cui ti trovi, ma qui se volessimo ricominciare da capo sarebbe un caso di sederci con il proprietario del prodotto e convincerli perché e poi scrivere una pila di storie per ricreare esistenti funzionalità.

Le altre cose che abbiamo fatto per provare a gestire codici errati e / o legacy sono state quelle di includere le attività di rielaborazione quando si assegnano le storie degli utenti.


Quindi gli sviluppatori possono scrivere "storie" e inviarle? Il problema è spiegare i motivi per cui la riscrittura è troppo tecnica per essere
gestita

6
@punkouter: se i motivi per voler riscrivere sono puramente tecnici (vale a dire non costare i soldi dell'azienda), NON AVETE motivo sufficiente per una riscrittura.
Michael Borgwardt,

@MichaelBorgwardt: Stai dicendo che eventuali motivi tecnici non sono mai sufficienti per riscrivere qualcosa? Questo è un approccio fondamentalmente rotto, se ti capisco correttamente. Una cosa che mi fa innervosire continuamente è il normale approccio master / slave secondo cui il "business" determina tutto ciò che "IT" o qualsiasi dipartimento fa. Questo è vero solo fino a un certo punto. L'IT ha i suoi requisiti interni e non decisi dall'azienda: questa è una cosa che di solito manca e porta a software non ingegnerizzato, non adatto allo scopo.
nicodemus13,

1
@ user12355 Come ho visto, il punto di Michaels è che se non li perde, non li farà guadagnare, quindi non ci sarà mai un caso. Se non stanno perdendo denaro, una riscrittura costa loro denaro. Denaro che non può essere recuperato. Uno sviluppatore potrebbe fare il caso di "questo codice fa schifo" ma a meno che non possano dimostrare un vantaggio finanziario al loro datore di lavoro, non otterranno mai il via libera per riscrivere a meno che non lo facciano da soli.
Rig

1
@ user12355: motivi tecnici sono decisamente sufficienti per una user story. Non sono necessariamente sufficienti per far sì che quella storia venga promossa in cima alla lista e inserita in uno sprint.
Adam V,

4

Decidere su grandi riscritture è una decisione commerciale. Puoi provare a influenzare le decisioni aziendali vendendo dal tuo punto di vista alle persone responsabili della parte aziendale delle cose.

Tuttavia; il cambiamento nella qualità del codice da una iterazione alla successiva è una decisione dello sviluppatore. Se permetti alla qualità del codice di diminuire, stai aggiungendo un debito tecnico per soddisfare ora le aspettative del proprietario del prodotto. Quello che puoi fare è iniziare a prenderti la responsabilità del codice che scrivi e assicurarti che migliori la base di codice, non viceversa. Ora questo significa che perderai velocità, poiché stai diminuendo continuamente la quantità di debito tecnico e il proprietario del prodotto rimarrà sicuramente deluso. Puoi provare a spiegare che, nel tuo entusiasmo per favore, hai lasciato degradare la qualità del codice e ora stai prendendo provvedimenti per correggere questo problema.

Ora, mi rendo conto che è un passo terrificante da fare e potrebbe essere tentato di ritardarlo di un altro sprint in modo da poter uscire dalla funzione X prima di una scadenza importante. Sfortunatamente, diventerà più difficile man mano che aspetti.

A proposito, questo non è strettamente un problema di Scrum, né sto suggerendo una soluzione specifica per Scrum. Si tratta di sviluppatori che assumono la proprietà del codice.


1
Giusto e quando hai una storia di 10 anni di fatturato costante e una tantum da parte di sviluppatori che chiaramente non sono stati in grado di programmare bene o capire l'architettura moderna allora ... hai quello che ho adesso ... Sono più preoccupato di chiunque altro da quando Sono nuovo del lavoro e non abituato a vedere un livello di codice così basso .. Voglio riscrivere non solo per il mio egoistico desiderio di divertirmi a scrivere un nuovo buon codice .. ma per il bene di tutti gli altri .. anche se non capiscono la situazione come me.
punkouter

1
Posso solo ribadire ciò che è già stato detto; Formalmente, non puoi decidere che ora è il momento della grande riscrittura. Immagino che potresti provare a mostrare agli stakeholder quanto sforzo è necessario per trasformare in modo incrementale la tua base di codice in uno stato leggermente meno doloroso, e confrontarlo con lo sforzo necessario per eseguire una riscrittura completa.
Buhb,

3

Gli sviluppatori sono responsabili di avvisare il mondo sullo stato corrente della base di codice. Questo può accadere durante una mischia quotidiana, una retrospettiva o semplicemente in modo informale. Può sembrare ovvio ma se non esprimi chiaramente che casino è e quanto tempo perdi a causa sua, nessuno se ne accorgerà mai. Lo Scrum Master sarà in genere responsabile della trasmissione delle informazioni all'OP e alle persone incaricate del progetto e di persuaderle a fare qualcosa, facilitando quindi l'implementazione di una soluzione da parte del team.

Come nota a margine, una riscrittura del big bang è che l'IMO non è necessariamente la risposta giusta a questo tipo di problema. Comunque stufo che gli sviluppatori siano con l'attuale base di codice, fare piccoli passi misurabili verso un'architettura più pulita è spesso un'idea migliore poiché puoi vedere i progressi, giustificare il tuo lavoro mostrando regolarmente all'OP i risultati e continua il flusso di implementazione di un nuovo utente storie in parallelo invece di perdersi in un rinnovamento senza fine e monopolizzante delle risorse.


Come ho già detto .. Non c'è modo di procedere con una raccolta di 6 siti ASP classici + 4 siti .net 1.1 che sono tutti combinati in un sito. Tutto codificato da persone diverse in modi diversi.
punkouter,

Sono abbastanza sicuro che la base di codice andrà avanti, per gli anni a venire, per parafrasare il dott. Ian Malcom di Jurrasic Park "Sto semplicemente dicendo che la direzione, uh ... trova un modo" .

Potrebbe succedere tra qualche anno, ma vari tipi di siti .net legacy strettamente accoppiati non rischiano di spostarsi molto in quegli anni.
Erik Reppen,

Certo, ma se tutti quei siti .net continuano a funzionare e il loro funzionamento continua a generare entrate direttamente o indirettamente per l'azienda, perché lo slancio in avanti è così importante? Quando le entrate sono direttamente influenzate dalla qualità della base di codice, puoi credere che i gestori non perderanno tempo a riprogettarla poiché hanno tutti i mutui da pagare, proprio come fanno gli sviluppatori.
Peter Lange,

Lo slancio in avanti incessante è generalmente la radice del problema in primo luogo nella mia esperienza. Il dolore inizia quando le aspettative di inversione di tendenza non diminuiscono mentre continuano a non udire i problemi dell'architettura e pensano che Scrum svilupperà magicamente nuove serie di funzionalità complete ogni due settimane senza esacerbare ulteriormente il problema. Non sto dicendo che non dovremmo essere cauti dell'impulso di strappare roba se non riusciamo a trovare alternative che risolvano i pozzi di tempo che stiamo incontrando, ma ho visto almeno due casi molto buoni per revisioni nella mia carriera.
Erik Reppen,

2

Hai chiesto:

Dov'è la parte in Scrum in cui gli sviluppatori possono avere il potere di dire che è abbastanza e chiedere loro di avere il tempo di iniziare la grande riscrittura? Sembriamo in un ciclo infinito di patch del vecchio codice con "Stories". Quindi le cose non sono gestite da persone non tecniche che sembrano non avere alcuna voglia di spingere per una riscrittura perché non capiscono quanto male sia la base di codice.

Come persona che è sia un manager che uno sviluppatore, la risposta più semplice alla tua domanda è che non c'è parte in Scrum, o in qualsiasi altra metodologia o in qualsiasi scenario aziendale, in cui lo sviluppatore ha il potere di dire abbastanza è sufficiente e richiede un riscrivere. Molte persone qui hanno avanzato argomentazioni valide e valide per spiegare perché le riscritture sono spesso cattive idee e per spiegare come il cambiamento può e deve essere prodotto in modo incrementale e agile. E sono d'accordo con tutti loro.

Ma la linea di fondo è ancora più semplice. Non puoi prendere quella decisione, MAI. Sei il dipendente e l'unica decisione che prendi davvero è "continuerò a lavorare per questi asshat o troverò un nuovo lavoro che teme la mia folle abilità". Il tuo nuovo lavoro non ti permetterà nemmeno di prendere quella decisione, ma almeno ti sentirai come se avessi il controllo del tuo destino mentre salti da un lavoro all'altro.


1
Se sto leggendo correttamente tra le righe qui, sembra che tu sia un po 'amaro per la tua incapacità di trattenere i nuovi assunti. Se non sbaglio, hai considerato che i neoassunti le cui competenze sono in realtà abbastanza richieste da poter camminare quando non amano lavorare nella tua azienda sono le uniche non costanti nell'equazione?
Erik Reppen,

1
Neanche vicino. In realtà i dipendenti del mio dipartimento sono con me da alcuni anni ormai. Non ho praticamente girato. Il punto che sto cercando di sottolineare è che alla fine, in qualsiasi azienda, in qualsiasi settore, il lavoro svolto dal dipendente dipende completamente dalla persona che firma la busta paga e non dal dipendente. L'unica decisione che il dipendente deve prendere, incluso me stesso quando il mio capo fa una richiesta, è di perseverare o meno nel rapporto del dipendente. Il poster originale ha chiesto quando, come dipendente, riesce a dettare lo sviluppo. La risposta non è mai
Peter Lange,

Allora, che cosa è stato con la caratterizzazione di "fear my mad skilz"? Questo ragazzo è un dev esperto. E posso dirti dalla mia esperienza in situazioni simili che il problema di cui sta parlando non è solo una questione di volere le cose a modo suo, ma in realtà un disastro in corso che sta rendendo tutti miserabili e costa molto di più al suo datore di lavoro in dev sprecati ritenzione di tempo e talenti di quanto probabilmente si rendano conto.
Erik Reppen,

1
Perché stavo illustrando la fallacia dell'argomento di base, che era radicato nell'ego (in senso psicologico). Non è una questione di quanto sia abile. Non è una questione di quanto sia incasinato il codice. Non è una questione di ciò che la metodologia di sviluppo può fare per lui. È una domanda sul potere. Il potere di prendere decisioni in una relazione di lavoro spetta al datore di lavoro. L'unico potere decisivo che un dipendente ha è di annullare la relazione quando diventa troppo da sopportare.
Peter Lange,

1
Sono d'accordo, la mischia è pessima per affrontare il debito tecnologico. Ma non sono d'accordo sulla base della domanda originale. In realtà stava facendo una domanda sul rapporto datore di lavoro / dipendente, ma ha appena menzionato la mischia nella domanda. È come se chiedessi: "Come cristiano, qual è il modo migliore per fare un Enchillada?". Non è proprio una questione teologica; è una domanda sulla cucina anche se ho fatto l'errore di pensare che le mie preferenze religiose fossero rilevanti.
Peter Lange,

1

Sento il tuo dolore, ma non sono sicuro di cosa abbia a che fare con Scrum. La decisione di riscrivere il codice non dipende dal processo di sviluppo.


Un processo di sviluppo che promette che le cose verranno completate ogni due settimane può fare molto per ostacolare il necessario refactoring su larga scala che è stato ignorato per anni. La prima cosa che ho notato nell'allenamento della mischia è il modo in cui smascherano il tema del debito tecnologico. Non è eccitante dichiarare che la tua app è ora più snella e più cattiva e puoi fare le cose più velocemente. I tipi di attività commerciali vogliono aggiungere valore aggiunto che possano mostrare ad amici e investitori.
Erik Reppen,

1

Aspetta cosa?

Stai rattoppando ? Dovresti essere refactoring . Attenersi a valori agili. Usa TDD e pratiche appropriate e la situazione alla fine migliorerà.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.