Parece mais fácil ser genérico no pequeno, ou seja, não crie uma classe para manipular uma tabela de pesquisa que mapeie números inteiros para strings quando você puder criar uma classe de dicionário razoável que lide com qualquer par de tipos (onde o primeiro tipo suporta algum tipo de comparação).
Em uma vida anterior, eu fiz muitos projetos de automação industrial para máquinas que lidavam com uma rede contínua de material. Aço, alumínio, papel, plástico, .... Você desenrola em uma extremidade e enrola novamente na outra depois de fazer algo útil no meio. Em um setor, você começa no "rolo de pagamento", não no "desenrolador". Se você usa a terminologia errada, é um idiota aos olhos multimilionários do cliente. Você ficaria surpreso com o quão pouco poderia ser abstraído para reutilização de um projeto para o outro. OTOH, muitas vezes é possível criar uma estrutura ou modelo como ponto de partida. Seria personalizado para o trabalho em questão, mas pelo menos tinha o benefício de aprender com projetos anteriores. E todos na equipe sabiam de onde estávamos começando.