Выкинуть первую версию
Известная мудрость гласит, “планируй выкинуть первую версию программы”.
In most projects, the first system built is barely usable….Hence plan to throw one away; you will, anyhow.
— Fred Brooks
Перевод:
В большинстве проектов, первая версия едва ли пригодна к использованию. Запланируйте выбросить её, ведь вам всё равно придётся это сделать.
— Фред Брукс
Это повергает в ужас программиста, ведь если любая первая версия будет уничтожена, то значит время на еë создание было потрачено впустую.
Выкинуть все версии
Я иду дальше и утверждаю, что выкинуть следует не только первую, но и все последующие версии, как существующие, так и те что ещë только в планах.
Почему выкидываем?
Старый код как гиря на ноге замедляет нас, и чем дальше тем больше.
Нужно побороть страх “впустую потраченного времени” и вовремя избавляться от устаревшего кода, который жалко выбросить.
Безжалостно лишая старый код ореола святости, цинично кромсая его при любом пересмотре мы расчищаем себе путь вперëд, к более качественному коду.
Что выкидываем?
Это не значит что код необходимо уничтожать полностью каждый раз. Конкретные куски кода или удачные решения можно и нужно переиспользовать.
Полной замене подлежит лишь то что устарело и плохо вписывается в решение.
В первую очередь подлежит пересмотру общий дизайн — он всё ещё хорошо описывает решение задачи, или уже нет? Правильно ли поделили на модули, соответствует ли структура таблиц в БД нашей бизнес-логике? То, что было хорошим решением вчера, сегодня уже могло устареть.
Если началось расхождение кода и реальности — переписываем код, меняем структуру таблиц в БД, заново бьём на модули, пересматриваем дизайн системы.
В чём польза?
Старый код был полезен уже тем что он работал и чему-то нас научил. Каждая новая версия приближала нас к лучшему пониманию дизайна системы.
Теперь мы можем построить новую версию, с которой будет легче и проще работать.
С новой версией фичи снова будут реализовываться за часы и дни, а не за недели и месяцы.
Выкидываем всегда
Улучшать код системы можно бесконечно, требования тоже постоянно меняются, поэтому избавление от кода также должно быть планомерным и неизбежным.
Код мëртв, да здравствует код.