Il "punto di eccessiva complessità" è indicato in inglese come:
OH MIO DIO CHE COSA È QUESTO FUGATO.
Il problema è che questo può applicarsi a qualcosa che in realtà è semplice, ma è implementato in un modo così orribile da avere la stessa reazione.
Quindi distinguere qualcosa di molto complesso da qualcosa di molto orribile può essere difficile.
TUTTAVIA: Ciò che tende effettivamente a succedere a tutto il software è un processo un po 'come questo:
Step 1: Avere una buona specifica, fare un bel design, implementare cose carine. Tutti contenti.
Alla fine del passaggio 1: gli sviluppatori si congratulano con se stessi per la meravigliosa eleganza del loro design e se ne vanno felici pensando "Ho un'eredità meravigliosa qui per gli altri per aggiungere cose in futuro, sarà meraviglioso e il mondo sarà un un posto migliore."
Passaggio 2: vengono apportate alcune modifiche, le cose vengono aggiunte, sono incluse nuove funzioni. L'architettura e la struttura del passaggio 1 hanno reso questo processo abbastanza indolore. [Ma oops, il "fattore di trapianto" è appena aumentato un po '.]
Alla fine del passaggio 2: gli sviluppatori si congratulano con se stessi per la meravigliosa eleganza del loro design e se ne vanno felici pensando "Accidenti, sono così intelligente di aver preso tutte quelle indennità nel passaggio 1. Questo è andato così bene. Ho un'eredità meravigliosa qui per gli altri aggiungere cose in futuro, sarà meraviglioso e il mondo sarà un posto migliore ".
Passaggio 3: vengono apportate più modifiche, vengono aggiunte più cose, più nuove funzioni, un sacco di cose vengono cambiate, il feedback degli utenti viene effettivamente ascoltato.
Alla fine del passaggio 3: gli sviluppatori si congratulano con se stessi per la meravigliosa eleganza del loro design e se ne vanno abbastanza felici pensando "Accidenti, questa architettura è abbastanza buona per consentire così tante modifiche di inserirsi facilmente. Ma sono un po 'scontento su X e Y e Z. Ora potrebbero essere ripuliti un po '. Ma !!! Ahhh !!! Sono così intelligente di aver concesso tutte quelle indennità nel passaggio 1. È andato tutto bene. Ho un retaggio meraviglioso qui per altri a cui aggiungere cose in futuro, sarà meraviglioso e il mondo sarà un posto migliore ".
Passaggio 4: proprio come il passaggio 3. Tranne:
Alla fine del passaggio 4: gli sviluppatori pensano: "Questa roba così buona sta diventando brutta da mantenere. Ha davvero bisogno di alcuni cambiamenti seri. Non mi piace molto lavorare su questo. Ha bisogno di refactoring. Mi chiedo quale sia il capo dirò quando gli dirò che ci vorranno 6 settimane e non ci sarà nulla che gli utenti possano vedere alla fine di questo ... ma avrò altri 5 anni di ambito di modifica futuro delizioso facendo questo .... hmmm .. . tempo di andare al pub per un po 'di birra. "
Passaggio 5: è necessario apportare alcune modifiche.
E DURANTE il passaggio 5 gli sviluppatori si dicono l'un l'altro: "Questo codice fa schifo. Chi ha scritto questo? Dovrebbero essere sparati. È orribile. Dobbiamo riscriverlo."
Il passaggio 5 è fatale. È qui che il fattore cruft è diventato così grave che il codice non può avere solo qualche altra modifica, ma deve avere alcune GRANDI modifiche.
Il problema al passaggio 5 è il desiderio di buttarlo via e ricominciare. Il motivo per cui questo è fatale è "The Netscape Factor". Vai su Google. Le aziende muoiono a questo punto, perché ricominciare significa iniziare con circa il 50% di ipotesi invece di fatti, il 150% di entusiasmo invece di conoscenza, il 200% di arroganza invece di umiltà ("Quei ragazzi erano così stolti!"). E introduci un sacco di nuovi bug.
La cosa migliore da fare è refactoring. Cambia un po 'alla volta. Se l'architettura si sta un po 'stancando, correggila. Aggiungi, estendi, migliora. Gradualmente. Ad ogni passo lungo il percorso, prova, testa e prova ancora un po '. Cambiamenti incrementali come questo significano che 10 anni dopo il codice attuale e originale sono come un'ascia da nonno ("aveva 10 nuove teste e 3 nuove maniglie ma è ancora un'ascia da nonno"). In altre parole, non è rimasto molto in comune. Ma sei passato dal vecchio al nuovo gradualmente e con attenzione. Ciò riduce il rischio e, per i clienti, riduce il fattore incazzato.