Инженерный перфекционизм или как мы переплачиваем за архитектуру, которая никому не нужна

За годы в разработке я прошёл путь от фанатичного следования всем принципам SOLID и паттернам проектирования до понимания одной простой, но болезненной истины, пользователю всё равно, насколько элегантно выглядит ваша абстракция в пятом слое архитектуры.
Не поймите меня неправильно, чистый код важен. Но часто мы, разработчики, попадаем в ловушку инженерного перфекционизма, забывая, зачем мы вообще здесь собрались.

Мои признаки, что уже слишком:

  • Преждевременная оптимизация. Вы тратите три дня на внедрение кэширования для функционала, который будут использовать 10 человек раз в неделю.
  • Архитектура на будущее. Создание сложной системы плагинов там, где достаточно обычного if, просто потому что, вдруг оно когда то понадобится. Как правило, не понадобится.
  • Бесконечный рефакторинг. Когда задача закрыта на 95%, но вы продолжаете переименовывать переменные и перекладывать методы из класса в класс, откладывая релиз.

    Лучший код - это код, который решает проблему здесь и сейчас.
    Мой совет джунам, не бойтесь грязных решений, если они оправданы сроками и здравым смыслом.