Come posso gestire un programmmmer difficile che si unisce a un progetto open source?


65

Ho uno script open source per un sito specifico (sto cercando di non chiamare nulla per nome qui) che io e alcuni altri sviluppatori abbiamo recentemente spostato su GitHub. Abbiamo ottenuto diversi nuovi sviluppatori da quando siamo passati al nuovo sistema, incluso uno molto attivo in particolare. Tuttavia, questo attivo ha iniziato a cambiare molto del progetto.

Prima di tutto, ha eliminato il nostro sistema di versioning (non come Git, ma così - l'abbiamo chiamato versioni v4.1.16) e ha detto che sarebbe meglio semplicemente inviare il codice al sito quando pensiamo che sia pronto. Ora non c'è posto centralizzato per mettere le note di rilascio, che è diventato fastidioso.

La cosa che mi ha reso quasi pronto a fare le valigie e andare è stata la sceneggiatura push. Un altro sviluppatore del progetto ha scritto un semplice script push basato su Python. Dato che teniamo online più versioni dello script in vari luoghi, ho iniziato a codificare un programma Java più grande con un'interfaccia grafica che sostituirà lo script Python. Sono andato su IRC per notificarlo a tutti e ho ricevuto una risposta molto fastidiosa dal programmatore dicendo che il vecchio script basato su Python può fare tutto ciò che il mio può fare ed è molto più leggero (ha anche commentato il fatto che pensava Python era migliore di Java e così via). Ho esaminato il codice per il vecchio script push e ho visto che nessuna delle funzionalità che diceva esistessero.

Quindi ora voglio sapere cosa fare. Ho trascorso molto del mio tempo in questo progetto, quindi non voglio solo alzarmi e andarmene, ma trovo difficile lavorare con questo nuovo sviluppatore. D'altro canto, ora è il committer numero 1 del progetto, con ancora più impegni rispetto allo sviluppatore principale. Non sono davvero sicuro di cosa fare al riguardo. Qualcun altro ha riscontrato questo problema? Se è così, cosa hai fatto?

AGGIORNAMENTO 1 : Ho disabilitato l'accesso commit di tutti e sto chiedendo alle persone di passare attraverso le richieste pull. Ho anche proposto diverse misure per risolvere le altre questioni. Tutti gli altri non hanno mostrato alcun supporto per questo. Il fastidioso dev ha semplicemente detto che le persone che non seguono da vicino la "commessa dell'azione" possono pensare che il progetto sia disorganizzato quando non lo è. Ovviamente non sono d'accordo con questo, quindi sto seriamente pensando di dimettermi dal progetto.

AGGIORNAMENTO 2 : Lo sviluppatore principale ha iniziato a lamentarsi del fatto che uno dei miei commit presumibilmente ha eliminato tre nuove righe nel codice (il commit di ripristino è apparso subito dopo aver pubblicato la discussione e non fa nemmeno riferimento al mio "commit"), quindi i due hanno iniziato a discutere se revocare il mio accesso al commit. Quindi, ho fatto la cosa logica e ho lasciato il progetto. Grazie per l'aiuto a tutti!


46
Come può una persona cambiare il sistema di versioning da solo? Sicuramente deve aver avuto un sostegno popolare, almeno tra alcune persone. E, a giudicare da un altro commento, c'è stato un cambio di licenza per limitare tutto - Perché non siete più vocali quando le basi del vostro progetto vengono improvvisamente scosse / sostituite?
Deer Hunter,

32
Ti manca il punto della domanda. In che modo un nuovo arrivato si è unito al tuo progetto e ha apparentemente preso il sopravvento? Potrebbe essere open source, ma è implicito che ci sia un leader o un gruppo di leader, e presumibilmente che / quei leader sarebbero gli unici che hanno la capacità di cambiare parti così importanti del modo in cui il progetto è gestito.
alroc,

35
Questo è il tuo progetto su github, giusto? C'è un motivo per cui non puoi rimuovere il suo accesso al progetto? O gli ha fatto la sua forchetta da cui puoi tirare se ti piacciono i cambiamenti? Se qualcuno si prendesse da solo per cambiare il modo in cui il codice veniva aggiornato in un mio progetto, sarebbero andati subito.
GrandmasterB,

6
cosa fai? Pubblica su TheDailyWTF e condividi il link con tutti. Lo vergognerai fino alla sottomissione.
rath

24
Onestamente, e indipendentemente dalle altre questioni qui in gioco, sostituire uno script Python con un programma Java grafico per spingere software su un sito Web mi sembra follemente ingegnoso.
sam hocevar,

Risposte:


55
  1. Puoi smettere. Non è la cosa più costruttiva da fare, ma a volte è l'unica opzione. Se lo fai, non sederti e lamentarti di come hai dovuto rinunciare, prendi quell'energia e mettila direttamente in qualcos'altro - "vai avanti" in altre parole.

  2. Puoi rovinarlo. Non c'è motivo per cui devi lavorare con nessuno. Fork, migliora il codice e lascia che gli altri continuino ad avere un piccolo ego-fest. Il tuo nuovo progetto competerà semplicemente con il vecchio e dipende da te se riesci a riuscirci, o il vecchio ti batte in termini di utenti e funzionalità.

  3. Puoi impegnarti con il resto del team di sviluppo del progetto per esprimere le tue preoccupazioni. Non renderlo personale, ma rendi conto che sei insoddisfatto della varianza del codice, della mancanza di processi di qualità stabiliti o insoddisfatto del fatto che le nuove decisioni vengano semplicemente respinte senza il consenso di tutti. Ti verrà detto che nulla è abbastanza sbagliato da cambiare, o alcuni altri saranno d'accordo con te sul fatto che il team ha bisogno di sistemare le cose. Ciò potrebbe finire con il ragazzo dirompente che perde l'accesso al commit. Forse sarete tutti d'accordo sul fatto che alcune delle modifiche non sono miglioramenti e il progetto deve essere ripristinato. (Quest'ultima opzione è il risultato più probabile, a meno che non si trasformi in una massiccia discussione di opinioni radicate).

Può essere difficile quando qualcuno arriva e cambia le routine sicure e comode a cui ti sei abituato, ma si potrebbe dire che avere qualcuno che si avvicina e scuote le vecchie e accoglienti pratiche sono cose buone in sé.


2
Proporrei un fork ();
ott--

1
Perché il congedo è indicato come soluzione n. 1? Se il progetto è davvero così eccitante, non dovrebbe essere l'ultima opzione?
Deer Hunter,

2
@DeerHunter: non ho letto l'ordine delle possibilità come ordine di preferenza, ma è utile avere prima elencato 1,2 poiché queste possibilità possono informare la discussione su 3.
hardmath,

36
le opzioni sono elencate in ordine di più semplice da scrivere.
gbjbaanb,

Scambia n. 3 con n. 1, devi respingere perché un lupo solitario senza riguardo per nient'altro può distruggere un buon progetto.
Jonathan Neufeld,

39

Hai reso poco chiaro esattamente quale sia il tuo ruolo qui. La risposta dipende da come ci si adatta.

Se stai guidando il progetto e controlli il repository git

Riprendi il controllo. Se questo ragazzo sta eseguendo commit che non ti piacciono senza consultarti, rimuovi il suo accesso diretto al commit. Può rovesciare il progetto e fare richieste pull per unire i suoi commit. Ecco come dovrebbe funzionare l'open source fino a quando un utente non crea fiducia. Non è necessario e non si dovrebbe dare l'accesso completo immediatamente.

Se qualcun altro controlla il repository

Esprimi le tue preoccupazioni alla persona che lo fa e incoraggia un processo più disciplinato per pianificare e approvare le modifiche. Se la leadership non è suscettibile di un processo, puoi scegliere di accettare lo status quo e continuare a contribuire, puoi forkare il progetto e lavorare sulla tua versione (portando con te chiunque sia d'accordo), oppure puoi scegliere di andartene e lavorare su altre cose. In ogni caso non ti viene richiesto di continuare a occupartene.


23

Per favore, perdona la mia franchezza, ma il tuo post sembra un rant.

Dici che è l'altro che vuole cambiamenti insensati, ma poi ti contraddici quando parli di questo tuo nuovo brillante programma Java.

Fare una pausa; non è una strada a senso unico, per favore cerca di trovare dei compromessi (se vuoi continuare a lavorare sul progetto - il fork è la decisione più semplice ma non ti porterà in alcun luogo utile, sebbene possa accarezzare il tuo ego).

Per favore, rifletti attentamente sulla divisione del lavoro nel progetto: le guerre per il territorio sono inevitabili se non hai confini chiari che ti dicono chi è competente in cosa . Sì, a volte devi fidarti del giudizio degli altri.


4
@ Nathan2055 - Semplice e funzionante è meglio, nel mio libro (forse sono solo io). Ad ogni modo, sembra che il progetto sia alla deriva senza molte indicazioni.
Deer Hunter,

1
Sono d'accordo con la parte alla deriva. Una delle cose che ho dimenticato di menzionare è che lo stesso sviluppatore ha rilanciato a caso il progetto senza dirlo a nessuno.
Nathan2055,

24
In che modo esattamente un nuovo sviluppatore ha modificato unilateralmente la licenza su un corpo di codice esistente su cui non ha il controllo esclusivo del copyright? Come ha ottenuto tale accesso / autorità e perché non è stato portato via?
KutuluMike,

7
Tutta questa situazione non si somma. Nessuno può andare e modificare unilateralmente la licenza su un progetto OS. Dal momento che non l'hai accettato e (suppongo) hai apportato contributi, il suo cambiamento significa squat.
Norcross,

9
@ Nathan2055 La modifica della licenza di un progetto senza autorizzazione è probabilmente motivo di licenziamento immediato, anche in progetti open source. Solo perché è open source non significa che un tipo casuale può semplicemente entrare e assumere il controllo. Non importa quanto siano epiche le sue capacità di programmazione, se non riesce a lavorare in una squadra non lo vuoi lì e devi parlare con lui e / o buttarlo fuori. A meno che tu non ci dica tutto ...
Thomas,

10

In diverse risposte è già menzionato che la divisione del lavoro è un modo per ridurre i conflitti. Ecco alcuni esempi concreti:

  1. Equilibrare produttività e stabilità. Per prendere in prestito un'analogia dai giochi di strategia, una squadra deve essere composta da un mix di Boom, Turtle e Rush e i compagni di squadra devono essere pronti a cambiare ruolo in risposta alla situazione.
    • Quando uno è in una mania della produttività, altri possono lavorare su:
    • Altre caratteristiche
    • Correzione di bug
    • Specifiche (gestione di nuove richieste di funzionalità e verifica che il software soddisfi i criteri concordati)
    • Garanzia di qualità
      • Test manuali (esplorativi)
      • Test automatizzati
    • Documentazione
    • Refactoring e pulizia del codice
    • Condurre studi sugli utenti per raccogliere idee per miglioramenti
    • eccetera.
  2. Un progetto può essere modulare (come nell'architettura software) o anche compartimentato (come nella gestione del progetto) in modo che ciascun modulo possa essere lavorato in modo indipendente.
    • In generale, la maggior parte dei software che contengono sia un front-end che un back-end dovrebbero essere modularizzati, poiché hanno una diversa velocità di sviluppo.
    • Il software ricco di UX può essere difficile da modulare a causa del loro uso intenso del routing di eventi tra moduli.
    • Il manutentore di un progetto potrebbe voler semplificare il progetto evitando la modularizzazione.
  3. Ramo delle caratteristiche . Ogni sviluppatore può eseguire il fork del progetto, lavorare sulla sua funzione preferita per gli animali domestici e richiedere l'unione al termine dell'implementazione. Lo sviluppatore principale può avere l'ultima parola sull'accettazione della fusione.

A parte l'aspetto di prevenzione dei conflitti, è evidente che il progetto potrebbe avere una governance insufficiente .

Perché la governance è importante? Immagina un giorno che un ex compagno di squadra abbia preso un pezzo del software e abbia fatto causa alla squadra per violazione. O la squadra citata in giudizio dal troll di brevetti. O nessuno lo sa, che ha deciso di inviare avvisi DMCA al sito di hosting del progetto e richiedere la cancellazione del codice sorgente del progetto.

Come minimo:

  • La licenza deve essere utilizzata da tutto il codice sorgente fornito
  • Le licenze con cui è possibile pubblicare il codice sorgente del progetto
    • Nel caso in cui venga richiesta una nuova licenza pubblica, come ottenere il consenso di ogni collaboratore
  • Chi può avere accesso amministrativo al progetto
  • Chi sarà designato per rispondere alle richieste legali (come gli avvisi DMCA o i troll di brevetti)
  • Chi gestirà i finanziamenti per il progetto (pagando le spese del server e registrando le entrate pubblicitarie o le donazioni)
  • Chi avrà diritto di voto per includere nuovi membri ed espellere i membri.
  • eccetera.

La maggior parte dei siti di progetto open source può fornire carte di governance del progetto già pronte.


1
+1 per la governance. Prima o poi tutti i progetti open source necessitano di alcune regole scritte e di alcuni codici, sia che si tratti di una governance completa per progetti di grandi dimensioni, sia di un semplice codice di condotta (come wiki.gnome.org/CodeOfConduct ) per qualunque forum, mailing list , database di bug o SCCS che condividete tutti.
calum_b

9

Ho visto il problema prima. Ma dopo pochi anni ti sei davvero stancato del progetto, quindi la mia soluzione è stata quella di abbandonare il progetto . Potrebbe non funzionare per te, ma il problema è fondamentalmente che persone diverse pensano in modi diversi. Le funzionalità che ritieni molto importanti non sono affatto importanti per le altre persone.

Un buon piano sarebbe quello di dividere i compiti di persone diverse. Se riesci a concordare con le persone quale parte del progetto è sotto la responsabilità di ciascuna persona, solo una persona sta prendendo decisioni su una determinata parte del progetto. Ma il lavoro di squadra è sempre difficile. Non ti piaceranno mai le decisioni prese da altri programmatori. La migliore soluzione è non guardare mai ciò che hanno deciso gli altri programmatori. Basta fidarsi di loro per fare la cosa giusta è abbastanza.

L'obiettivo comune focalizzerà i tuoi sforzi sulle cose importanti. Tutti coloro che lavorano nella stessa direzione sono difficili da ottenere e si verificheranno comunque conflitti. Per decidere l'obiettivo comune è necessario conoscere lo stato corrente del progetto e quindi decidere dove deve trovarsi dopo un po 'di tempo.

Ecco un esempio di cose da evitare: ad esempio, un gran numero di programmatori c ++ pensa che il codice che non utilizza la libreria STL sia rotto. Altri programmatori ritengono che ogni dipendenza da librerie esterne sia interrotta, incluso STL. Tali conflitti non possono essere risolti correttamente - entrambe le situazioni non possono essere colmate simultaneamente - e le persone più problematiche spingeranno la loro opinione indipendentemente dall'opposizione che incontreranno.


Un buon punto sulla divisione del lavoro.
Deer Hunter,

3
Non guardare mai ciò che hanno deciso gli altri programmatori, fidati di loro? Mi sembra pericoloso. Che dire del controllo di qualità?
Stephan,

6

Quattro scelte, credo.

  1. Buttalo fuori. Sei (presumibilmente) ancora il principale amico di questo progetto; revoca i suoi privilegi push e chiamalo un giorno. Il risultato più probabile è che lui biforcasse il progetto, dividendo la sua comunità, e poi scoppiò una guerra, e quando la polvere si depositerà, una delle forcelle sarà quella popolare.
  2. Biforcalo e continua altrove. Meno aggressivo di 1., ma le conseguenze sono comunque le stesse. Dovrai essere attivo nella comunità per attirare le persone dalla tua parte.
  3. Lascia stare: lascia che faccia quello che sta facendo, calmati e spera per il meglio.
  4. Discutere con la comunità, scendere a compromessi se necessario e risolvere la situazione.

Personalmente, preferirei l'opzione 4.


6

Google ne ha parlato un paio di volte alcuni anni fa. Guardali:1 ,2 . In breve:

  1. Comprendere : Capire la motivazione della vostra comunità per lavorare al vostro progetto vs tutti gli altri costi di opportunità, e conservare tali motivi.
  2. Fortifica : costruisci una comunità sana con norme sociali di educazione, rispetto, fiducia e umiltà.
  3. Identifica : cerca segni rivelatori di persone velenose (troppe da elencare, ma se stai ponendo questa domanda probabilmente ne conosci già molte).
  4. Disinfetta : sii calmo e difendi la tua posizione, non reagire a insulti, insulti, sfide, mancanza di rispetto, ecc. E persevera nel rafforzare le norme della tua comunità.

È disponibile anche una descrizione scritta completa se si preferisce leggere invece di guardare.


3
ti dispiacerebbe ampliare un po 'quello che ognuna di queste risorse ha e perché le consigli a rispondere alla domanda posta? Le "risposte solo link" non sono del tutto benvenute allo Stack Exchange
moscerino del

1
Aggiunto sommario, come va?
Kurtosis,

5

Non puoi semplicemente smettere senza fare uno sforzo per esprimere le tue preoccupazioni e difficoltà. So che può essere difficile. Infatti, se tu e i membri del tuo team siete abbastanza giovani da non sperimentare in prima persona molti problemi sociali che si verificano in qualsiasi team di sviluppo, può essere davvero difficile.

Detto questo, credo fermamente che dovresti esprimere le tue preoccupazioni. Puoi scriverli nell'e-mail e mostrarlo ai tuoi amici fidati che non fanno parte del team e non hanno o poco interesse per quello che fai. In questo caso potresti ricevere un buon feedback in modo che il testo della tua email non sia troppo duro. Attenersi ai fatti però. Non accusare o incolpare. Solo fatti che è difficile fare qualcosa per te perché manca "blah". Perché manchi "blah" dovrebbe essere chiaro a tutti i membri del team, vale a dire "il nuovo programmatore" cancellato o non ha ottenuto risultati.

Ancora una volta, l'invio di questa e-mail è difficile ma è di per sé un'ottima esperienza che può essere molto utile per il tuo futuro. Ottima lezione da imparare.

PS: non intendevo sembrare troppo genitoriale. Tuttavia è davvero qualcosa che direi a chiunque, compresi i miei figli.


7
"Non puoi semplicemente smettere" ... Sì, puoi . Non è una scelta da prendere alla leggera in quanto significa che brucerai tutti i ponti con tutti gli altri membri della squadra se lo fai, ma se la situazione è abbastanza grave (al punto da causare disagio emotivo), solo andare via è sempre un'opzione .
Shadur,
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.