Каждая единица знания должна иметь единственное, однозначное представление в системе. Дублирование кода означает, что изменение нужно вносить в нескольких местах — и одно неизбежно забудут. DRY — о знаниях, а не только о тексте: copy-paste плохо, но общая функция для двух разных концепций — тоже плохо.
Простейшее решение, которое решает задачу — лучшее. Сложный код трудно читать, тестировать и поддерживать. Сложность — враг.
Не реализуй функциональность, пока она действительно не нужна. Код, написанный «про запас», устаревает, захламляет кодовую базу и часто вообще не используется. Пишите для сегодняшних требований.