Sembra più facile essere generici nel piccolo, cioè non creare una classe per gestire una tabella di ricerca che mappa gli interi in stringhe quando puoi creare una classe di dizionario ragionevole che gestisce qualsiasi coppia di tipi (dove il primo tipo supporta alcuni tipi di confronto).
In una vita precedente ho realizzato molti progetti di automazione industriale per macchinari che gestivano una rete continua di materiale. Acciaio, alluminio, carta, plastica, .... Lo srotoli ad una estremità e lo arrotoli di nuovo all'altro dopo aver fatto qualcosa di utile nel mezzo. In un settore inizi al "payoff reel", non allo "unwinder". Se usi la terminologia sbagliata, sei un idiota negli occhi da molti milioni di dollari del cliente. Sareste stupiti di quanto poco possa essere astratto da riutilizzare da un progetto all'altro. OTOH, si potrebbe spesso creare una struttura o un modello come punto di partenza. Sarebbe stato personalizzato per il lavoro da svolgere, ma almeno aveva il vantaggio di apprendere da progetti precedenti. E tutti nel team sapevano da dove stavamo iniziando.