Полезный кусок
Большой проект редко удаётся выполнить одним движением. Не хватает денег, людей, информации или возможности остановить текущую работу до завершения новой.
В таких случаях проект лучше делить не просто на этапы, а на полезные состояния. После каждого этапа система уже должна что-то уметь.
Плохое разбиение выглядит так:
1. разобрать всё существующее;
2. несколько месяцев строить новое;
3. в конце надеяться, что оно заработает.
Хорошее — так:
1. запустить минимальную работающую часть;
2. проверить её;
3. перенести небольшой объём;
4. исправить обнаруженное;
5. расширить систему;
6. отключить старую только после подтверждения новой.
Иногда промежуточное решение придётся позднее выбросить. Это не обязательно потеря. Временная лестница тоже не становится бессмысленной оттого, что её убрали после завершения здания.
Цена промежуточного этапа оправдана, если он:
- уже приносит пользу;
- снижает риск;
- даёт данные;
- позволяет остановиться без катастрофы;
- сохраняет работу существующей системы;
- обнаруживает ошибку до полного масштаба.
Недострой особенно опасен тем, что поглощает ресурсы, но ещё не производит результата. Десять почти законченных проектов могут создавать впечатление огромной деятельности и удивительно мало пользы.
Работающий небольшой результат обычно ценнее грандиозной конструкции, которая начнёт приносить пользу сразу после ещё одного квартала, согласования и удачного расположения планет.
Промежуточная польза особенно важна при замене действующей системы: старое нельзя уничтожать только потому, что новое уже красиво нарисовано.
Снять все окна можно за день. Новые задержатся на три недели. Отключить старую программу — одним решением. Затем выяснится, что новая не умеет выполнять операцию, которой «никто уже не пользуется», кроме бухгалтерии, склада и половины клиентов.
Пока замена не работает, старая система остаётся страховкой. Она может быть неудобной, неэффективной и давно раздражать всех участников. Но её недостатки известны. У нового решения недостатки пока существуют преимущественно в будущем времени.
Поэтому при возможности полезно заменять постепенно:
- одно окно;
- один участок;
- одну команду;
- один тип данных;
- одну функцию;
- один рабочий процесс.
Параллельная работа двух систем стоит дороже. Зато позволяет сравнивать результаты и возвращаться назад.
Полный переход оправдан, когда постепенный невозможен, старая система сама создаёт опасность или стоимость параллельной работы неприемлема. Но такое решение должно быть осознанным риском, а не побочным эффектом желания поскорее увидеть чистую площадку.
Кухню переделывают именно так, только редко по плану. Сначала выносят старую мебель, потому что она мешает, и три недели семья моет посуду в ванной, греет еду в микроволновке на подоконнике и обедает стоя. Пользы этот этап не приносит: он не готовит еду и не приближает новую кухню, зато показывает, сколько операций держалось на старой раковине. Другая последовательность — собрать и подключить новый гарнитур вдоль свободной стены, а старый выносить после первого приготовленного ужина — стоит дороже и выглядит нелепо ровно те три дня, когда в кухне стоят обе.
Разница между этими двумя ремонтами не в аккуратности, а в том, кто платит за срок. В первом случае неопределённость оплачивает семья, ежедневно, ужином на подоконнике. Во втором — заказчик, один раз, деньгами. Обычно это дешевле.