Domanda:
Migliorare il software quando l'autore non vede la necessità di miglioramenti
Karl Bielefeldt
2019-08-09 18:16:21 UTC
view on stackexchange narkive permalink

Ho un collega che è stato praticamente l'unico collaboratore di un servizio per diversi anni. Per la maggior parte, fa un lavoro sopra la media. Funziona in modo abbastanza affidabile, è stato accuratamente testato ed è relativamente facile da leggere riga per riga.

Il software ha anche molto spazio per miglioramenti. I dettagli non contano davvero per questa domanda, ma i difetti sono completamente indiscutibili per gli altri con cui li ho discussi. Cose come analizzare una grammatica altamente annidata con espressioni regolari. Inoltre, porta il disaccoppiamento all'estremo, a scapito di altri principi di progettazione altrettanto importanti.

Questi problemi si sono accumulati nel tempo, al punto che ora apportare modifiche richiede molto più tempo del previsto e il mio collega ha davvero bisogno di aiuto per evitare che il backlog cresca.

Il problema è quando qualcun altro cerca di dare una mano, prende personalmente le modifiche, diventa molto difensivo sul suo codice, ha difficoltà ad ammettere che c'è qualcosa di sbagliato nel suo design e incolpa i problemi dell'errore dell'utente o del codice scritto da altre persone. In altre parole, sembra completamente cieco di fronte ai difetti del suo codice.

È gentile e simpatico, ma anche molto testardo, e manterrà la sua posizione per giorni, nonostante più persone non siano d'accordo con lui. Se ci avviciniamo a lui prima di apportare le modifiche, è anche peggio, perché ha difficoltà a visualizzare il risultato. Non abbiamo tecnicamente bisogno del suo permesso per apportare miglioramenti, ma è una cosa cortese da fare.

È un processo faticoso per tutte le persone coinvolte e, francamente, non lo so Non voglio più spendere le energie. Come posso approcciarmi ad apportare miglioramenti al suo codice senza dover litigare (educatamente) per giorni prima di ottenerlo?

Chi è il responsabile?Chi stabilisce le priorità, alloca le risorse e prende decisioni su quanto sia ragionevole un termine di consegna o uno sforzo di manutenzione?
correlato (forse un duplicato): [Come posso trattare con uno sviluppatore difficile che sta trattenendo il progetto?] (https://workplace.stackexchange.com/q/2017/168)
È possibile suddividere una parte del codice del servizio in modo che ora sia responsabilità di qualcun altro?Quindi il manutentore originale può trattarlo come una scatola nera mentre gli altri sviluppatori gestiscono le modifiche a quel componente?
"Motivo della cessazione: non gioca bene con gli altri".
Per affermare l'ovvio, la società possiede il codice non il collega.Proponi una serie di modifiche al tuo manager, ottieni l'ok dal tuo manager e aggiustalo.
Sette risposte:
Neo
2019-08-09 18:37:22 UTC
view on stackexchange narkive permalink

Come posso approcciarmi ad apportare miglioramenti al suo codice senza dover discutere (educatamente) per giorni per ottenerlo?

In base al testo di questa domanda, sembra come una persona molto ragionevole e ha fatto le cose necessarie per cercare di essere inclusivo e premuroso dell'altro sviluppatore quando introduce nuove tecniche.

A questo punto, penso che dovresti portare questo all'attenzione di il tuo manager . Non dovresti dover discutere ogni singolo impegno, soprattutto quando l'approccio è chiaramente migliore.

Hai già provato a lavorare direttamente con l'individuo e si è dimostrato estenuante. Lascia che il tuo manager se ne occupi in futuro.

Questa potrebbe essere una buona risposta, ma dipende dal manager.Rischia di far sembrare OP lamentoso se il manager non è abbastanza tecnico per capire la necessità di apportare modifiche al codice.Se il manager è tecnico, allora può essere convinto (o no, se non pensa che i cambiamenti siano una buona idea) che c'è un problema.Per lo meno gli darà un avvertimento in caso di contraccolpo.E ottenere il suo permesso per apportare le modifiche trasferisce i problemi futuri al manager, che è, credo, a cui appartengono.
Il manager non ha bisogno di essere tecnico per questo caso.Ciò che deve essere compreso, sia dal manager che dallo sviluppatore, è che il codice che hai scritto sul lavoro non è tuo, è dell'azienda.
@FrancineDeGroodTaylor se il manager non è in grado / non vuole vedere i vantaggi del trasferimento, così sia;sarebbe responsabilità del manager e non dell'OP.Ciò che l'OP non può fare è oltrepassare le sue funzioni e assumere la posizione di manager solo perché ne ha voglia.E una situazione che rischia di creare un conflitto personale con la squadra è sicuramente la responsabilità del manager.Il problema qui non è tecnico, ma personale.
@FrancineDeGroodTaylor: Idealmente, questo dovrebbe essere inquadrato in termini che un manager non tecnico può capire, ad es."[Il modulo X] ha molti debiti tecnici, tanto che [funzione Y] ha richiesto [Z] [giorni / settimane / mesi] extra per l'implementazione a causa di ciò. [Persona A] e [Persona B] sono d'accordo con meche dovremmo dedicare un po 'di tempo al refactoring, ma [la persona C] sembra non essere d'accordo. Quando ho inviato loro [richiesta di bug / pull Q], si sono offesi, il che non era il mio intento. Come suggerisci di andare avanti? "
Sono con Francine su questo.Il nostro responsabile non tecnico prende OGNI questione di questa natura che gli viene portata, convoca una riunione di tutti i programmatori, cerca invano di spiegarci la questione, quindi chiede il consenso.Di conseguenza, siamo tutti risentiti per lui e l'un l'altro.
Qualcuno alla fine deve tagliare il nodo e prendere una decisione qui.Il manager è l'unico responsabile di tutte le persone coinvolte.
sf02
2019-08-09 18:31:54 UTC
view on stackexchange narkive permalink

Come posso approcciarmi ad apportare miglioramenti al suo codice senza dover litigare (educatamente) per giorni prima che venga unito?

Non avvicinatelo più quando apporto il codice. L'hai già tentato in più occasioni e i risultati non sono stati desiderabili.

A questo punto, poiché hai dichiarato che la sua autorizzazione non è necessaria, vai semplicemente avanti e lavora con i tuoi colleghi per migliorare il codice quando necessario. Non tentare di riscrivere l'intero programma, modifica e migliora solo il codice necessario per il tuo compito specifico.

Non menzionerei nulla al collega fino a quando le modifiche non saranno state completate e accuratamente testate e puoi dimostrare che il nuovo codice è un effettivo miglioramento. Questo è molto importante, il codice che tu e gli altri tuoi colleghi scrivete deve essere migliore dell'originale, altrimenti non solo turbi il collega, ma perdi credibilità.

Fattore bus.Fattore bus.Fattore bus.
Il problema con questo approccio è che puoi entrare in un ciclo di comportamento passivo aggressivo in cui l'OP migliora il codice nel modo in cui l'OP lo vuole, il manutentore originale quindi migliora il codice nel modo in cui vuole che sia.
@DaveG, hai decisamente ragione sul fatto che questo ciclo potrebbe iniziare.Il modo per assicurarsi che ciò non accada è avere il concetto di revisione del codice.Se il manutentore originale inizia ad apportare modifiche non richieste, probabilmente causando di nuovo i bug originali, questo dovrebbe essere rilevato prima che vengano distribuiti.A quel punto, il gestore può essere nuovamente avvisato delle modifiche, aggiungendosi ulteriormente alla causa dell'OP.Un dipendente che apporta modifiche non richieste a volte può essere contrario alla politica, anche se ha le migliori intenzioni.Nel peggiore dei casi, potrebbe essere considerato una perdita di tempo o dannoso.
Un altro modo per prevenire ciò potrebbe essere aggiungere test unitari che coprano ciò che hai corretto.Se il superamento della suite di test è un requisito per l'accettazione del codice, le modifiche non possono essere semplicemente annullate.(E se la suite di test può essere attivata automaticamente al check-in, allora non sei direttamente coinvolto.) In un lavoro precedente, la penalità per aver infranto la build era comprare torte per il resto del team!È stato un approccio divertente ma efficace.
Stai interpretando male la domanda: non è che il richiedente non può cambiare il codice, ma che le sue modifiche non sono accettate - la parte specificamente rilevante della domanda è ** "senza dover discutere (educatamente) per giorni per ottenerlo?"** Immaginate che siano i ripristini che non passerebbero attraverso la revisione del codice, in realtà sono i" miglioramenti "del richiedente che vengono rifiutati durante la revisione.
Jay
2019-08-09 18:42:35 UTC
view on stackexchange narkive permalink

Dovresti considerare separatamente i problemi di (a) preferenza e (b) prestazioni. I due problemi che descrivi (utilizzando regex per l'analisi o dando priorità al disaccoppiamento) potrebbero essere più nel campo di preferenze di composizione e non limitatori di prestazioni importanti.

In entrambi i casi, tuttavia, dovresti concentrarti sul valore in gioco (quante ore o grattacapi o dollari sarebbero risparmiati da un cambiare) ed evitare di criticare le implementazioni esistenti , indipendentemente da quanto possano essere dannose.

Renditi conto anche che il debito tecnologico è indesiderabile, ma accade in ogni squadra e risolverlo può essere un costo considerevole. A volte è davvero meglio lasciare le cose come stanno anche quando devi creare costantemente soluzioni alternative.


(a) Per problemi di preferenze diverse , è utile descrivere le alternative a cui pensi, ma probabilmente il tuo collega avrà l'ultima parola su come è composto il pacchetto. Dovresti anche chiarire che i tuoi suggerimenti sono la tua preferenza e non un modo oggettivamente migliore per comporre codice. Anche dove sono stati creati standard di composizione altamente opinioni (ad esempio PEP-8 & Black), questi rimangono opinioni e potrebbero non essere adatti ai problemi su cui lavora la tua organizzazione. Discutere le preferenze come pari sarà un approccio molto più amichevole che criticare la preferenza del tuo collega.


(b) Per questioni di software e / o prestazioni del team , è anche utile suggerire alternative, ma adottare alcune misure ragionevoli per assicurarti che i tuoi suggerimenti siano produttivi:

  1. Qual è l'impatto quantificato sul rendimento? Se un L'alternativa all'analisi con regex viene eseguita 100 volte più velocemente, quante ore di calcolo verrebbero risparmiate nel corso di un anno?
  2. Che tipo di sforzo richiederà la rielaborazione? Moltiplica la stima per 3. E ora che sai che stai per moltiplicare per 3, potresti essere sbilanciato verso il basso, quindi moltiplica di nuovo per 3.
  3. Qual è la rilevanza delle prestazioni della sezione di codice per le esigenze dei tuoi clienti? I tuoi clienti si preoccupano delle prestazioni (sia in termini di latenza di elaborazione che di costo)?
  4. Com'è la tua idea di miglioramento delle prestazioni rispetto ad altre idee di miglioramento? Probabilmente ci sono molte idee nel "parcheggio" per il tuo team: questo miglioramento delle prestazioni è abbastanza sostanziale da diventare la priorità?

Dopo aver risposto a queste domande, potresti proporre l'idea al tuo team.

HenryM
2019-08-09 19:02:36 UTC
view on stackexchange narkive permalink

Supponendo che abbiate entrambi la stessa anzianità: se un ragazzo mi dicesse che sto cambiando il suo codice nel modo sbagliato (e so per certo di non esserlo), gli direi di aggiustarlo a modo suo . Poi, quando afferma di non avere il tempo, glielo dico gentilmente di stfu. Stai estendendo il problema trattandolo come un fiore delicato. Oppure opzione due: smettila di aiutarlo al 100%. Chiedi ai tuoi colleghi di fare lo stesso. Quindi il suo problema di non essere in grado di correggere il suo codice in modo tempestivo salirà sicuramente alla direzione. Quando la direzione chiede perché non siete giocatori di squadra, tutti puntate il dito contro di lui. Onestamente questo ragazzo avrebbe dovuto essere licenziato anni fa. Il tuo manager sta dormendo di sicuro. Anche il manager più senza mani dovrebbe essere consapevole di quanto tempo ci vuole per sistemare questo codice di ragazzi.

Se ti classifica fuori quella è un'altra storia. Forse è ora di cercare un altro lavoro.

Puntare il dito in questo modo ha un alto potenziale di ritorno di fiamma.Lo sviluppatore del problema può puntare il dito indietro.A meno che l'OP e il collega non parlino prima del problema con il manager, non c'è modo di smettere di lavorare con il problema.Se non stanno seguendo gli ordini del manager di lavorare con questa persona, potrebbero essere disciplinati o addirittura licenziati.Il PO deve collaborare con il manager piuttosto che lavorare unilateralmente.
Nella mia esperienza in una situazione leggermente simile in cui un ragazzo non stava tirando il suo peso, non è mai arrivato nemmeno al livello di puntare il dito perché a un certo punto quel ragazzo si rende conto che è un problema suo e non tuo.Ed è quello che sarà nei guai se la palla cade.Sono d'accordo con il tuo punto implicito, è un problema di tutti in una squadra.Ma quando qualcuno non fa parte del team è diverso.Non puoi premiare le persone che non sono giocatori di squadra.Non fa che peggiorare.Se si arriva a una crisi, il problema verrà definitivamente risolto.
@computercarguy ... Voglio dire se la situazione non è una vera crisi.In ogni caso ci deve essere responsabilità.Se un ragazzo è un problema che deve essere affrontato.
Thorbjørn Ravn Andersen
2019-08-10 04:40:24 UTC
view on stackexchange narkive permalink

Prima di tutto

  • È tua opinione che il suo design e il suo codice siano difettosi.
  • È la sua opinione che non lo sia.

Le opinioni fanno guerre di trincea e colleghi infelici. Devi renderlo misurabile. Esistono strumenti in grado di analizzare il codice ed estrarre elementi come la profondità della gerarchia, la copertura dei test, ecc. Trova uno strumento in grado di misurare ciò che ritieni importante e fare in modo che il team concordi su ciò che dovrebbe essere fatto e usa lo strumento per vederti arrivare.

Forse puoi analizzare perché la correzione dei bug attualmente richiede così tanto tempo, così puoi aiutarlo a migliorare dove vuole migliorare. Potresti sbagliarti nelle tue supposizioni.

Questo è effettivamente circolare.Le tue stesse "misurazioni" derivano solo da opinioni.Che uno strumento riporti qualcosa potrebbe essere un fatto, che il rapporto sia pertinente o appropriato per dare la priorità a qualche altro obiettivo è una questione di opinione.** Puoi selezionare, configurare o creare uno strumento per confermare qualsiasi opinione che hai **.Il vero problema è il ** disaccordo sugli obiettivi. **
@ChrisStratton Hai letto tutto?** "Fai in modo che il team sia d'accordo su ciò che dovrebbe essere fatto" **.In altre parole, il team concorda su obiettivi comuni e su come misurare se li stai raggiungendo.
Non date suggerimenti su come raggiungere un tale accordo.Questo è il problema originale, motivo per cui la tua risposta è circolare.
@ChrisStratton Team sembra più grande delle due persone presentate qui.Anche in questo caso la soluzione è renderlo misurabile e decidere per un obiettivo quello che si vuole come _team_ e poi utilizzare una guida per arrivarci.Se ciò non è possibile per la squadra, allora la squadra è disfunzionale e potrebbe essere necessaria una riorganizzazione.L'antagonista potrebbe dover essere rimosso dal "suo" codice perché non lo è.
"Renderlo misurabile" è una distrazione irrilevante dal problema immediato quando non c'è accordo su cosa misurare.Se la tua unica proposta per risolvere un ** disaccordo fondamentale sugli obiettivi ** è di rimuovere l'autore originale, le cose probabilmente andranno benissimo per un mese o due quando le persone inizieranno a ottenere ciò che vogliono, ma la base di codice diventerà rapidamente un elemento non mantenibile e incoerentepasticciare con nessuno che cura il cambiamento rispetto a un'architettura coerente, e la maggior parte delle conoscenze sul motivo per cui le richieste di modifica passate sono state rifiutate perse e impiegando molto tempo per ricostruirle dolorosamente.
@ChrisStratton No, renderlo misurabile è fondamentale per rimuovere la parte dei sentimenti dalle parti di questo conflitto che è a mio avviso l'unico modo in cui è attualmente possibile discutere questa situazione con le parti coinvolte.Si tratta TUTTA di sentire.Se non lo affronti, non potrai mai farlo funzionare bene.Inoltre, ti suggerirei di formulare i tuoi numerosi pensieri in una risposta ben scritta affinché gli altri possano commentare come hai commentato il mio.Potresti imparare una o due cose.
Non hai ancora proposto alcun approccio valido per risolvere il disaccordo, quindi in realtà non hai pubblicato una risposta tu stesso, ma solo * finta * di farlo.Quando non si ha ancora effettivamente una soluzione, è meglio non fingere di sì, poiché ciò distrae e disonesto.
@ChrisStratton Continuiamo la discussione nel commento alla tua risposta.
Cerchiamo di [continuare questa discussione in chat] (https://chat.stackexchange.com/rooms/97370/discussion-between-thorbjorn-ravn-andersen-and-chris-stratton).
Aaron
2019-08-11 04:35:24 UTC
view on stackexchange narkive permalink

Per interpretare l'avvocato del diavolo, qualcuno che non è d'accordo con il tuo collega ha tentato di capire il loro punto di vista?

Hanno lavorato da soli a questo progetto per anni (qualcuno ha espresso interesse prima d'ora?) e ora , nonostante abbiano un prodotto affidabile e ampiamente testato con un codice sorgente di facile lettura, le persone vogliono annullare il loro codice perché pensano che il loro codice sia migliore.

Se il tuo collega non è in grado di visualizzare il risultato, quindi non riesci a comunicare l'idea nel contesto del prodotto. Ricorda, questo è qualcosa a cui hanno pensato per diversi anni, lo sanno dentro e fuori.

La soluzione a questo problema è un semplice metodo in 4 fasi:

  1. Suggerisci (dai il tuo suggerimento);
  2. Ascolta e riconosci (ascolta la loro risposta);
  3. Negozia (trova un compromesso);
  4. Azione (enact il compromesso).

Ad essere perfettamente onesto, però, se sto leggendo la situazione direttamente dalla domanda, probabilmente non dovrai preoccuparti del collega per molto più tempo come loro probabilmente sta già pensando di cambiare datore di lavoro poiché l'ambiente si sentirebbe molto "contro di loro".

jmoreno
2019-08-11 05:19:51 UTC
view on stackexchange narkive permalink

Aggiungi il lavoro che ritieni debba essere fatto alla tua lista di cose da fare, foglio di lavoro, tfs, problemi, jira, qualunque cosa. Chiedi al tuo manager di firmare la conclusione. Allora fallo.

Non consiglierei un incontro (formale o meno) per discutere cosa dovrebbe essere fatto e non aggiungerei tutto il lavoro in una volta. Scegli qualcosa che pensi possa essere migliorato e inseriscilo nella lista. Allora fallo. Risciacquare, insaponare, ripetere.

Non è che il richiedente non sia in grado di lavorare sul codice o apportare modifiche, è che ** le sue modifiche non vengono accettate nel codebase **: come indicato dal fatto che la domanda termina con "senza dover discutere (educatamente) per giorniper ottenerlo unito? "C'è un vero disaccordo sugli obiettivi lì: fare un giro finale intorno a quel disaccordo e l'autore originale che non è d'accordo non lo cambierà, ci deve essere una decisione adeguata su quali sono effettivamente gli obiettivi.Altrimenti quello che hai fondamentalmente è un fork, che normalmente non è praticabile in un'organizzazione.
Prendi * decisioni di progettazione * in * riunioni di progettazione * appropriate, non in quelle di pianificazione delle attività.
@ChrisStratton: Stavo suggerendo di evitare del tutto le riunioni.La domanda dice che non hanno bisogno dell'approvazione degli "autori", ma la cercano invece per educazione.Il mio suggerimento è fondamentalmente di abbandonare la gentilezza e di abituare l '"autore" a modifiche apportate senza la sua approvazione o anche senza il suo contributo.Ma fallo gradualmente.
I progetti di software audio non funzionano in questo modo, con nessuno libero di apportare qualsiasi cambiamento.E in effetti la domanda menziona specificamente l'ostacolo della necessità di far accettare il loro codice per l'unione.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 4.0 con cui è distribuito.
Loading...