Perché non possiamo fare nulla?


9

Lavoro in un piccolo team, in un'azienda di medie dimensioni, la maggior parte delle quali non è coinvolta nello sviluppo di software. Sono lo sviluppatore più recente e meno esperto e non ho avuto alcuna esperienza professionale o accademica nel software prima di iniziare, ma sono abbastanza soddisfatto di quanto sia rispettato il mio contributo e sono grato di essere stato preso sul serio in una fase così precoce della mia carriera.

Tuttavia, mi sento come se dovessi fare di più con questa generosa quantità di tempo di trasmissione. Come squadra, sembra che abbiamo problemi a fare le cose. Mi piacerebbe essere in grado di suggerire qualcosa per migliorare la situazione, e penso che sarei ascoltato se fosse una buona idea, ma non so cosa suggerire.

Le cose che posso identificare come problemi includono:

  • Le specifiche delle attività da svolgere sono scarse. Questo in parte perché la gestione è un collo di bottiglia e non abbiamo i soldi o le persone per impegnarci a elaborare requisiti dettagliati quanto vorremmo. In parte è anche perché il software che stiamo sviluppando è investigativo e il metodo preciso non è chiaro fino a quando non viene dimostrato e utilizzato per determinarne l'efficacia.
  • Il Lead Dev è molto affezionato a ciò che chiama "prototipazione" al punto che ultimamente ha iniziato a insistere sul fatto che tutto è "prototipato", che per il resto di noi sembra scrivere codice errato e darlo ai modellatori con cui giocare. Non è chiaro cosa si aspetti che esca da questo esercizio in molti casi. L'implementazione 'effettiva' soffre quindi a causa della sua insistenza sul fatto che le buone pratiche impiegano troppo tempo a realizzare il prototipo. Non ho nemmeno iniziato a essere in grado di districare questa logica contorta e non sono sicuro di voler provare.
  • I modellisti dovrebbero dirci tutto sulla metodologia desiderata in dettaglio preciso, ed è preso la fiducia assoluta che ciò che ne viene fuori è teoricamente impeccabile. Questo non è quasi mai vero, ma non viene intrapresa alcuna azione per correggere questa situazione. Nessuno dal punto di vista della modellistica solleva preoccupazioni in un modo strutturato su cui è probabile che venga attuato, né cercano una guida nell'applicazione delle migliori pratiche. Neanche si fa nulla della loro passività.
  • Ho provato a spingere TDD nel team prima, ma ho trovato difficile in quanto è nuovo per me e mentre quelli con la supervisione del mio lavoro erano disposti a tollerarlo, nessun entusiasmo è stato suscitato da nessun altro. Non posso giustificare il tempo che trascorro sguazzando e non finendo le caratteristiche, quindi l'idea è stata - per il momento - abbandonata. Temo che non verrà ripreso di nuovo, perché a nessuno piace sentirsi dire come fare il proprio lavoro.
  • Ora disponiamo di un server di integrazione continua, ma viene utilizzato principalmente per eseguire test di regressione di più ore. È stato lasciato aperto il fatto che dovrebbe essere in esecuzione anche unità a copertura totale e test di integrazione, ma al momento nessuno li scrive.
  • Ogni volta che sollevo il problema della qualità con lo sviluppatore principale, ottengo una risposta all'effetto di "Testare la funzione A è semplice, la funzione B è molto più importante per l'utente ma è troppo difficile da testare, quindi non dovremmo testare la funzionalità UN'. Ancora una volta non ho fatto progressi nel tentativo di districare questa logica.

.... uff. Quando lo dico così, sembra molto peggio di quanto pensassi. Suppongo, a quanto pare, questo è un grido di aiuto.


5
Quanto è brava l'azienda a distribuire software che il cliente utilizza e gli piace? In altre parole, il team sta ottenendo buoni risultati, nonostante non crediate che il processo sia stellare?
Robert Harvey,

@Robert Harvey - È difficile per me giudicare. I prodotti sono estremamente di nicchia e noi (sviluppatori) riceviamo messaggi contrastanti. Da un lato, i nuovi clienti nei mercati rivoluzionari stanno schiacciando il prodotto più di quanto inizialmente previsto e trovando di conseguenza guasti, che a loro non sembrano importare poiché spieghiamo perché e li risolviamo rapidamente. D'altra parte, alcuni grandi clienti istituzionali sono diffidenti e stiamo cominciando a prenderci la briga di modificare ripetutamente il modello. Il team del software è attualmente uno dei pochi in pareggio all'interno dell'azienda, quindi al momento abbiamo un bell'aspetto .
Tom W,

1
Vorrei sollecitare il maggior numero di feedback possibile da parte dei clienti per i modi per concordare un "modello" di lavoro di base e provare a consolidarlo un po '. Può davvero essere frustrante per i clienti cambiare un modello, ma se si tratta di un software nuovo e all'avanguardia, si adatta al territorio.
Robert Harvey,

Buona domanda. Ho notato che anche con un pubblico ricettivo, il vero cambiamento è difficile, a meno che tu non possa vederlo funzionare in pratica. Il mio consiglio è di provare prima gli approcci per aumentare la produttività e poi di dimostrarli per il team. Con la pratica, è possibile ottenere più velocemente nello sviluppo di TDD che scrivere / debug / ripetere.
Mike B,

Risposte:


19

Lasciami interpretare l'avvocato del diavolo per un momento:

Le specifiche dei compiti da svolgere sono scarse ... Il Lead Dev è molto affezionato a ciò che chiama "prototipazione"

Il principale sviluppatore ama la prototipazione perché le specifiche sono scarse. Questa è probabilmente una buona cosa; ecco come funzionano i negozi iterativi.

I modellisti dovrebbero dirci tutto sulla metodologia desiderata in dettaglio preciso

Questo non funzionerà in un negozio iterativo. La natura stessa dello sviluppo iterativo è che i requisiti sono spesso incompleti. Le iterazioni sono ciò che è necessario per perfezionare i requisiti.

Ho già provato a inserire TDD nel team, ma ho trovato difficile perché è nuovo per me

Neanche questo funzionerà; devi capire la tecnologia prima di poterla evangelizzare. Inoltre, in un negozio iterativo con requisiti scarsi, il TDD potrebbe essere eccessivo. È meglio incoraggiare un'adeguata copertura dei test unitari.

Ora disponiamo di un server di integrazione continua, ma viene utilizzato principalmente per eseguire test di regressione di più ore.

Ciò può essere appropriato in un piccolo negozio iterativo.

Ogni volta che sollevo il problema della qualità con lo sviluppatore principale, ottengo una risposta all'effetto di "Testare la funzione A è semplice, la funzione B è molto più importante per l'utente ma è troppo difficile da testare, quindi non dovremmo testare la funzionalità UN'

Sembra che il tuo negozio abbia dei limiti di tempo abbastanza stretti; piaccia o no, sei vincolato da questi vincoli.

Sembra anche che tu provenga da una parte dell'industria del software che apprezza il fatto di fare le cose "nel modo giusto" per ottenere le cose sul mercato prima. Non c'è nulla di sbagliato in questo (è ammirevole, in effetti), tranne per il fatto che il primo sul mercato con un software difettoso è spesso il vincitore. Non è giusto, ma è così.


Penso che dovrai affrontarlo dal punto di vista del "debito tecnico". Ogni azienda fa stime del tempo; supponendo che le tue siano già abbastanza buone, inizia a costruire un surplus dal 10% al 20% nelle tue stime di tempo per il refactoring e l'allenamento, e mantienilo.
Robert Harvey,

Continuare; Lo sviluppo iterativo è il nome del gioco, hai ragione. Il problema è che l'iterazione si risolve prima che sia effettivamente finita perché otteniamo vaghe banalità dai modellatori sul fatto che ciò che abbiamo codificato sia davvero corretto. Nessuno può identificare alcun errore, quindi ciò che abbiamo fatto viene spedito. Sei mesi dopo risulta essere sbagliato. Mi piacerebbe piace essere in grado di sottolineare che i modellisti hanno bisogno di essere data criteri più rigidi per contro prova, ma poi di nuovo, non è il loro lavoro per dirlo?
Tom W,

2
@ Tom: Finché non insisti sulle specifiche verificabili dei modellisti, possono sempre dire alla tua squadra che hanno sbagliato. Se ti riterranno responsabili per la produzione dei risultati dal loro modello, devi tenerli responsabili per averti fornito specifiche verificabili in modo da poter dichiarare il successo. Ogni specifica avrebbe dovuto incorporare una sorta di test "go, no go", in modo che tu e il cliente (o i modellatori) potreste concordare reciprocamente che il test è stato superato, senza essere interpretato.
Robert Harvey,

Giusto. Sfortunatamente potresti avermi obbligato ad ammettere qualcosa che non volevo - che abbiamo una mancanza di competenza. È evidente in generale, ma in particolare con i modellisti. Per alcuni aspetti insistiamo su specifiche precise, quindi finisce ancora male. Sono scienziati e, parlando per esperienza, gli scienziati tendono a trattare il codice come un esperimento, correggendo gli errori mentre si procede. Per il business questo semplicemente non è abbastanza buono ed è una questione di professionalità che ci si deve riconoscere.
Tom W,

Non c'è niente di sbagliato nel trattare il codice come un esperimento; fa parte del processo iterativo. Ma alla fine devi aggirare "questo codice accetta questi input e dovrebbe produrre questo output". Ecco a cosa servono i test unitari; fanno parte delle specifiche. Vedo perché vuoi fare TDD; impone le specifiche sul codice ... Ma è necessario il supporto della cultura aziendale per farlo funzionare, e TDD ha un'aria di "religione" al riguardo. Non tutto è testabile in questo modo, quindi alla fine, potresti dover vivere con un certo grado di disagio.
Robert Harvey,

2

Mi concentrerò sulla prototipazione qui

il problema principale con i prototipi è che sono intesi come prove di concetto

tuttavia, se non è possibile sviluppare ulteriormente il prototipo e è necessario ricostruire il prodotto finale da zero, è possibile che non si sia creato il prototipo e si sia perso tempo a costruirlo

consiglio al tuo team di ottenere qualità e flessibilità in questi prototipi. So che non è possibile creare cose perfette la prima volta, ma cercare di rimanere estensibile per esigenze future


Questo è quello che sto cercando di comunicare da tempo. Come spesso accade, i prototipi sono spesso preziosi e ci insegnano lezioni essenziali sulla natura del problema. Tuttavia, se tali lezioni apprese sono lasciate al caso e la qualità dell'implementazione si basa sul fatto che lo sviluppatore ricostituisce le conoscenze acquisite dal loro cervello, piuttosto che utilizzare il prototipo per scrivere le specifiche. Lo sviluppatore principale afferma che dovrebbe succedere quest'ultimo, quindi non garantisce che ciò accada.
Tom W,

quando dice che vuole un prototipo ciò che intende è che vuole una versione minima funzionante e il più veloce possibile. Questa sarà la base per la versione finale. Il problema con l'approccio è che gli sviluppatori junior (in genere) possono scrivere un buon codice o scrivere codice velocemente, ma raramente possono fare entrambi allo stesso tempo.
Kevin,

2
Fred Brooks ha detto "Scrivine uno da buttare via, lo farai comunque", è vero oggi come lo era 40 anni fa.
mattnz,

1

Queste sono buone risposte. Posso solo aggiungere che "cercare di comunicare" è nella migliore delle ipotesi una proposta incerta. I cambiamenti nel modo in cui un'organizzazione funziona non avvengono rapidamente. Quando succede è spesso come una marea, dove lo slancio si sviluppa dal basso e dall'alto. Quindi sarai più felice se mantieni le tue aspettative basse e o aspetti la tua occasione per dire come verranno fatte le cose o non vedi l'ora di lavorare con un'altra organizzazione.


1

Hai identificato qualcuno in azienda che lo "capisce" in tal caso, aggrappati a questo ragazzo e impara il più possibile da lui. In caso contrario, dedica il tuo tempo, inizia a imparare e crescere da solo (unisciti a un progetto Open Source o avvia il tuo progetto) e cerca un posto che possa favorire la tua crescita.

La cosa peggiore che può succedere è rimanere lì e imparare a fare le cose nel modo sbagliato. Sì, dovrebbe essere preso un po 'di pragmatismo, ma un team veramente competente può fare le cose nel modo giusto ed essere comunque puntuale con un prodotto di qualità. Sembra che la tua squadra attuale non abbia quello che serve e dovresti iniziare a cercarne uno nuovo.


"Hai identificato qualcuno in azienda che" lo capisce "" LOL
Kenzo il
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.