Un adagio classico è "Un buon design non è quando non c'è nulla da aggiungere ad esso, ma quando non c'è nulla da togliere" . Non ricordo chi lo abbia detto, ma è vero. Un buon design è semplice e pulito, non ci sono parti superflue in esso, ma è aperto alle estensioni allo stesso tempo.
Si noti che il riconoscimento di questi tratti richiede in definitiva un'analisi approfondita della struttura del codice. Considerando che riconoscere alcuni tratti comuni di cattiva progettazione è facile (pensare a classi enormi, metodi lunghi, convenzioni di denominazione incoerenti / inesistenti ...). Naturalmente, si potrebbe dire, è possibile avere un codice con un grande design ma nomi poveri o altri odori di codice. O cattivo design ma codice pulito e facilmente leggibile. Tuttavia, la nostra pratica ci ha insegnato che il lavoro sciatto o frettoloso crea entrambi codice errato e cattiva progettazione e viceversa: le persone che creano un design accattivante danno anche lo stesso livello di sforzo nella maggior parte o in ogni dettaglio del loro codice.
Un altro fattore è che il codice e il design sono molto più cattivi che buoni . Quindi abbiamo semplicemente probabilità di lavorare contro di noi, così otteniamo più esperienza nel riconoscere e gestire il codice cattivo che con quello buono (il che probabilmente ci rende anche pregiudizievoli). E tenderei a pensare che le persone che lavorano su un grande codice hanno più probabilità di rimanere lì per più tempo, quindi c'è meno fluttuazione in quei progetti. Che riduce ulteriormente le possibilità di inciampare su tale codice.