Разработчик A замечает дублирование кода, извлекает его в новую абстракцию и тут же понимает, что решил проблему. Разработчик B получает новое требование, которое почти подходит существующей абстракции. Чтобы сохранить её, B добавляет параметр и условную логику. Затем приходит требование C, потом D. Конечная абстракция обрастает условными ветками, становится непонятной и ломкой, каждое новое изменение рискует сломать весь механизм. Вместо попытки спасти усложнившуюся абстракцию через укол новых параметров, Sandi Metz рекомендует развернуться назад: разворошить абстракцию обратно на дублирование, дать каждому вызывающему коду только нужные ему части. Это удаляет условия и возвращает ясность. Затем, глядя на полученное дублирование, можно увидеть, какие новые правильные абстракции действительно нужны. Сложность и сроки давления часто сбивают разработчиков инвестировать в спасение неправильной абстракции вместо того, чтобы её заменить. Ред.: Совет 2014 года, который индустрия двенадцать л