Выкинуть первую версию

Известная мудрость гласит, “планируй выкинуть первую версию программы”.

In most projects, the first system built is barely usable….Hence plan to throw one away; you will, anyhow.

— Fred Brooks

Перевод:

В большинстве проектов, первая версия едва ли пригодна к использованию. Запланируйте выбросить её, ведь вам всё равно придётся это сделать.

— Фред Брукс

Это повергает в ужас программиста, ведь если любая первая версия будет уничтожена, то значит время на еë создание было потрачено впустую.

Выкинуть все версии

Я иду дальше и утверждаю, что выкинуть следует не только первую, но и все последующие версии, как существующие, так и те что ещë только в планах.

Почему выкидываем?

Старый код как гиря на ноге замедляет нас, и чем дальше тем больше.

Нужно побороть страх “впустую потраченного времени” и вовремя избавляться от устаревшего кода, который жалко выбросить.

Безжалостно лишая старый код ореола святости, цинично кромсая его при любом пересмотре мы расчищаем себе путь вперëд, к более качественному коду.

Что выкидываем?

Это не значит что код необходимо уничтожать полностью каждый раз. Конкретные куски кода или удачные решения можно и нужно переиспользовать.

Полной замене подлежит лишь то что устарело и плохо вписывается в решение.

В первую очередь подлежит пересмотру общий дизайн — он всё ещё хорошо описывает решение задачи, или уже нет? Правильно ли поделили на модули, соответствует ли структура таблиц в БД нашей бизнес-логике? То, что было хорошим решением вчера, сегодня уже могло устареть.

Если началось расхождение кода и реальности — переписываем код, меняем структуру таблиц в БД, заново бьём на модули, пересматриваем дизайн системы.

В чём польза?

Старый код был полезен уже тем что он работал и чему-то нас научил. Каждая новая версия приближала нас к лучшему пониманию дизайна системы.

Теперь мы можем построить новую версию, с которой будет легче и проще работать.

С новой версией фичи снова будут реализовываться за часы и дни, а не за недели и месяцы.

Выкидываем всегда

Улучшать код системы можно бесконечно, требования тоже постоянно меняются, поэтому избавление от кода также должно быть планомерным и неизбежным.

Код мëртв, да здравствует код.