Корисний шматок
Великий проєкт рідко вдається виконати одним рухом. Не вистачає грошей, людей, інформації або можливості зупинити поточну роботу до завершення нової.
У таких випадках проєкт краще ділити не просто на етапи, а на корисні стани. Після кожного етапу система вже має щось уміти.
Погане розбиття виглядає так:
1. розібрати все наявне;
2. кілька місяців будувати нове;
3. наприкінці сподіватися, що воно запрацює.
Добре — так:
1. запустити мінімальну робочу частину;
2. перевірити її;
3. перенести невеликий обсяг;
4. виправити виявлене;
5. розширити систему;
6. вимкнути стару лише після підтвердження нової.
Іноді проміжне рішення доведеться пізніше викинути. Це не обов’язково втрата. Тимчасові риштування теж не стають безглуздими від того, що їх прибрали після завершення будівлі.
Ціна проміжного етапу виправдана, якщо він:
- уже приносить користь;
- знижує ризик;
- дає дані;
- дозволяє зупинитися без катастрофи;
- зберігає роботу наявної системи;
- виявляє помилку до повного масштабу.
Недобуд особливо небезпечний тим, що поглинає ресурси, але ще не виробляє результату. Десять майже закінчених проєктів можуть створювати враження величезної діяльності і напрочуд мало користі.
Робочий невеликий результат зазвичай цінніший за грандіозну конструкцію, яка почне приносити користь одразу після ще одного кварталу, погодження і вдалого розташування планет.
Проміжна користь особливо важлива при заміні чинної системи: старе не можна знищувати лише тому, що нове вже гарно намальоване.
Зняти всі вікна можна за день. Нові затримаються на три тижні. Вимкнути стару програму — одним рішенням. Потім з’ясується, що нова не вміє виконувати операцію, якою «ніхто вже не користується», крім бухгалтерії, складу і половини клієнтів.
Поки заміна не працює, стара система лишається страховкою. Вона може бути незручною, неефективною і давно дратувати всіх учасників. Але її вади відомі. У нового рішення вади поки що існують переважно в майбутньому часі.
Тому за можливості корисно замінювати поступово:
- одне вікно;
- одну ділянку;
- одну команду;
- один тип даних;
- одну функцію;
- один робочий процес.
Паралельна робота двох систем коштує дорожче. Зате дозволяє порівнювати результати і повертатися назад.
Повний перехід виправданий, коли поступовий неможливий, стара система сама створює небезпеку або вартість паралельної роботи неприйнятна. Але таке рішення має бути усвідомленим ризиком, а не побічним ефектом бажання швидше побачити чистий майданчик.
Кухню переробляють саме так, тільки рідко за планом. Спочатку виносять старі меблі, бо вони заважають, і три тижні родина миє посуд у ванній, гріє їжу в мікрохвильовці на підвіконні й обідає стоячи. Користі цей етап не приносить: він не готує їжі і не наближає нової кухні, зате показує, скільки операцій трималося на старій раковині. Інша послідовність — зібрати і підключити новий гарнітур уздовж вільної стіни, а старий виносити після першої приготованої вечері — коштує дорожче і виглядає безглуздо рівно ті три дні, коли в кухні стоять обидві.
Різниця між цими двома ремонтами не в акуратності, а в тому, хто платить за строк. У першому випадку невизначеність оплачує родина, щодня, вечерею на підвіконні. У другому — замовник, один раз, грішми. Зазвичай це дешевше.