In breve, perché la fusione è spesso un altro posto in cui qualcosa può andare storto, e deve solo andare storto una volta per rendere le persone molto spaventate di affrontarlo di nuovo (una volta morso due volte timido, se vuoi).
Supponiamo quindi che stiamo lavorando su una nuova schermata di gestione dell'account e si scopre che c'è un bug scoperto nel flusso di lavoro del nuovo account. OK, prendiamo due percorsi separati: finisci la gestione dell'account e correggo il bug con i nuovi account. Dato che entrambi abbiamo a che fare con gli account, abbiamo lavorato con un codice molto simile, forse abbiamo dovuto persino modificare gli stessi pezzi di codice.
Ora, in questo momento abbiamo due versioni diverse ma perfettamente funzionanti del software. Entrambi abbiamo eseguito un commit sulle nostre modifiche, entrambi abbiamo testato diligentemente il nostro codice e indipendentemente siamo molto fiduciosi di aver fatto un ottimo lavoro. E adesso?
Bene, è tempo di fondersi, ma ... merda, cosa succede adesso? Potremmo benissimo passare da due set di software funzionanti a uno, unificato, orribilmente rotto di software di nuova generazione in cui la gestione dell'account non funziona e i nuovi account sono rotti e non so nemmeno se il vecchio bug è ancora lì .
Forse il software era intelligente e diceva che c'era un conflitto e ha insistito perché gli dessimo una guida. Beh, 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 ricevi un minuto controlli e vedi il mio codice che non capisci. Uno o entrambi dobbiamo prenderci il tempo per sederci, fare una fusione corretta e possibilmente ripetere il test dell'intera cosa del pericolo per assicurarci di non averlo rotto.
Nel frattempo altri 8 ragazzi stanno tutti commettendo codice come i sadici, ho fatto alcune piccole correzioni di bug e le ho inviate prima di sapere che abbiamo avuto un conflitto di unione, e l'uomo sembra sicuramente un buon momento per fare una pausa, e forse tu sono fuori per il pomeriggio o bloccati in una riunione o altro. Forse dovrei solo andare in vacanza. O cambia carriera.
E così, per sfuggire a questo incubo, alcune persone hanno avuto molta paura dell'impegno (cos'altro c'è di nuovo, prima?). Ovviamente siamo avversi al rischio in scenari come questo - a meno che non pensiamo di fare schifo e comunque lo rovineremo, nel qual caso le persone iniziano a recitare con abbandono spericolato. sospiro
Quindi eccoti. Sì, i sistemi moderni sono progettati per alleviare questo dolore, e dovrebbe essere in grado di retrocedere e rifare facilmente, 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, è significativo, ma gestire con grazia una fusione non conta.
I programmatori, di regola, devono sviluppare una grande memoria di lavoro, e quindi hanno la tendenza a dimenticare immediatamente tutti quei nomi spazzatura e variabili e scoping non appena hanno finito il problema e gestiscono un conflitto di unione (o peggio, un unione erroneamente gestita) è un invito a ricordare la tua mortalità.