In breve, perché la fusione è spesso un altro posto in cui qualcosa va storto, e basta sbagliare una volta per fare in modo che le persone abbiano molta paura di affrontarlo di nuovo (una volta morso due volte timido, se vuoi).
Quindi, diciamo che stiamo lavorando su una nuova schermata di gestione degli account, e si scopre che c'è un bug scoperto nel flusso di lavoro del nuovo account. OK, prendiamo due percorsi separati: finisci la gestione degli account e correggo il bug con i nuovi account. Dal momento che entrambi abbiamo a che fare con gli account, abbiamo lavorato con codice molto simile - forse abbiamo anche dovuto regolare gli stessi pezzi di codice.
Ora, in questo momento abbiamo due versioni di software diverse ma pienamente funzionanti. Abbiamo entrambi eseguito un commit sui nostri cambiamenti, entrambi abbiamo rigorosamente testato il nostro codice, e indipendentemente siamo molto fiduciosi di aver fatto un lavoro fantastico. E adesso?
Bene, è tempo di unire, ma ... cazzate, cosa succede ora? Potremmo benissimo passare da due serie di software funzionanti a un unico, unificato, orribilmente rotto pezzo di software nuovo buggy in cui la gestione degli account non funziona e nuovi account sono rotti e io non so nemmeno se il vecchio bug è ancora lì .
Forse il software era intelligente e ha detto che c'era un conflitto e ha insistito nel dargli una guida. Bene, merda - mi siedo per farlo e vedo che hai aggiunto un codice complesso che non capisco immediatamente. Penso che sia in conflitto con le modifiche che ho apportato ... Te lo chiedo, e quando ottieni un minuto controlli e vedi il mio codice che non capisci. Uno o entrambi dobbiamo prenderci il tempo di sederci, fare un'unione vera e propria, e magari ripetere il test sull'intera cosa per assicurarci di non romperla.
Nel frattempo altri 8 ragazzi stanno commettendo codice come i sadici che sono, ho fatto alcune piccole correzioni di bug e le ho presentate prima che sapessimo che avremmo avuto un conflitto di fusione, e l'uomo è sicuramente un buon momento per fare una pausa, e forse sei fuori per il pomeriggio o bloccato in una riunione o qualsiasi altra cosa. Forse dovrei solo fare una vacanza. O cambiare carriera.
E così, per sfuggire a questo incubo, alcune persone sono diventate molto impaurite dall'impegno (cos'altro è nuovo, in modo ambiguo?). Naturalmente siamo avversi al rischio in scenari come questo - a meno che non pensiamo che facciamo schifo e lo roviniamo comunque, nel qual caso la gente inizia a comportarsi con abbandono sconsiderato. sospirare
Quindi eccoti. Sì, i sistemi moderni sono progettati per alleviare questo dolore e si suppone che sia in grado di tornare facilmente indietro e rebase e debase e freebase e hanglide e tutto il resto.
Ma è tutto più lavoro, e vogliamo solo premere il pulsante sul microonde e fare un pasto di 4 portate prima di avere il tempo di trovare una forchetta, e tutto sembra così insoddisfacente - il codice è lavoro, è produttivo, il suo significato, ma gestendo con garbo un'unione solo non conta.
I programmatori, di regola, devono sviluppare una grande memoria di lavoro, e quindi avere la tendenza a dimenticare immediatamente tutti i nomi di spazzatura e variabile e l'ambito non appena hanno finito il problema e gestire un conflitto di unione (o peggio, una fusione erroneamente gestita) è un invito a ricordare la tua mortalità.