Кажется, легче быть универсальным в малом, то есть не создавать класс для обработки справочной таблицы, которая отображает целые числа в строки, когда вы можете сделать разумный класс словаря, который обрабатывает любую пару типов (где первый тип поддерживает некоторый тип сравнение).
В прошлой жизни я делал много проектов промышленной автоматизации для машин, которые обрабатывали непрерывную сеть материалов. Сталь, алюминий, бумага, пластик, .... Вы разворачиваете его на одном конце и снова скручиваете на другом, сделав что-то полезное в середине. В одной отрасли вы начинаете с «выигрышной катушки», а не с «раскручивания». Если вы используете неправильную терминологию, то вы идиот в глазах клиента на несколько миллионов долларов. Вы будете поражены тем, как мало можно абстрагировать для повторного использования из одного проекта в другой. OTOH, часто можно создать основу или шаблон в качестве отправной точки. Он будет настроен для работы под рукой, но, по крайней мере, он получит пользу от изучения предыдущих проектов. И все в команде знали, откуда мы начинали.