Вибачте, це триватиме недовго, але це базується на особистому досвіді як архітектора, так і розробника у кількох переписаних проектах.
Наступні умови повинні змусити вас розглянути можливість перезапису. Я поговорю про те, як вирішити, що робити після цього.
- Час нарощування для розробників дуже великий. Якщо для розробки нового розробника потрібно більше часу, ніж нижче (за рівнем досвіду), тоді систему потрібно переробити. Під часом нарощування я маю на увазі кількість часу до того, як новий розробник буде готовий здійснити свою першу фіксацію (про невелику функцію)
- Свіжий поза коледжем - 1,5 місяця
- Ще зелений, але працював над іншими проектами раніше - 1 місяць
- Середній рівень - 2 тижні
- Досвідчений - 1 тиждень
- Старший рівень - 1 день
- Розгортання не може бути автоматизовано через складність існуючої архітектури
- Навіть прості виправлення помилок займають занадто багато часу через складність існуючого коду
- Нові функції займають занадто багато часу і коштують занадто дорого через взаємозалежність бази коду (нові функції не можна виділити, а отже, впливати на існуючі функції)
- Офіційний цикл тестування займає занадто багато часу через взаємозалежність існуючої бази коду.
- Занадто багато випадків використання виконується на занадто мало екранах. Це спричиняє проблеми з навчанням користувачів та розробників.
- Технологія, яку потребує нинішня система, вимагає цього
- Якісних розробників з досвідом роботи в технологіях занадто важко знайти
- Він застарілий (його не можна оновити, щоб підтримувати новіші платформи / функції)
- Просто є набагато більш виразна технологія вищого рівня
- Витрати на підтримку інфраструктури старих технологій занадто високі
Ці речі досить очевидні. Коли приймати рішення про повне перезапис проти покрокової перебудови, це більш суб'єктивно, а отже, більш політично заряджене. Те, що я можу сказати з переконанням, це те, що категорично заявляти, що це ніколи не є хорошою ідеєю, це неправильно.
Якщо система може бути поступово перероблена, і ви маєте повну підтримку спонсорства проектів для подібних дій, то вам слід це зробити. Ось у цьому проблема. Багато систем не можна поступово переробляти. Ось деякі причини, з якими я зіткнувся, що заважають цьому (як технічним, так і політичним).
- Технічні
- З'єднання компонентів настільки велике, що зміни одного компонента неможливо виділити з інших компонентів. Повторне проектування одного компонента призводить до каскаду змін не тільки сусідніх компонентів, але опосередковано для всіх компонентів.
- Технологічний стек настільки складний, що майбутній стан проекту потребує декількох змін інфраструктури. Це також знадобиться в повному перезаписі, але якщо це потрібно в покроковому переробленні, ви втрачаєте цю перевагу.
- Повторне проектування компонента все одно призводить до переписування цього компонента, оскільки існуюча конструкція настільки фубар, що нічого не варто економити. Знову ж таки, ви втрачаєте перевагу, якщо це так.
- Політичні
- Спонсори не можуть зрозуміти, що поступовий перегляд проекту потребує довгострокової відданості проекту. Неминуче більшість організацій втрачають апетит до тривалого витрачання бюджету, яке створює додаткове перероблення. Ця втрата апетиту неминуча і для переписування, але спонсори будуть більш схильні продовжувати, тому що вони не хочуть розбиватися між частково повною новою системою та частково застарілою старою системою.
- Користувачі системи занадто прив’язані до своїх "поточних екранів". У такому випадку у вас не буде ліцензії на вдосконалення життєво важливої частини системи (переднього плану). Редизайн дозволяє вам обійти цю проблему, оскільки вони починають щось нове. Вони все ще наполягають на тому, щоб отримати "ті самі екрани", але у вас є трохи більше боєприпасів, щоб відштовхуватися.
Майте на увазі, що загальна вартість повторного проектування поступово завжди вище, ніж на повне перезапис, але вплив на організацію зазвичай менший. На мою думку, якщо ви можете виправдати перезапис, і у вас є суперзіркові розробники, тоді робіть це.
Робіть це лише в тому випадку, якщо ви можете бути впевнені в тому, що є політична воля, щоб довести її до кінця. Це означає, як викуп, так і виконавчий та кінцевий користувачі. Без нього ви невдачі. Я припускаю, що саме тому Джоел каже, що це погана ідея. Багато з архітекторів виглядає як придбання для виконавців, так і для кінцевих споживачів. Ви повинні продавати її агресивно і вести агітацію за її продовження постійно, поки вона не завершиться. Це важко, і ви говорите про те, щоб ставити свою репутацію на те, що деякі не хочуть бачити успіхом.
Деякі стратегії успіху:
- Якщо ви все-таки зробите це, не намагайтеся перетворити наявний код. Проектуйте систему з нуля. Інакше ти витрачаєш свій час. Я ніколи не бачив і не чув про проект "конверсії", який не закінчився бідно.
- Переміщення користувачів на нову систему по одній команді. Визначте команди, які мають найпоширеніші болі з існуючою системою, та перенесіть їх першими. Нехай вони поширюють добрі новини усним словом. Таким чином ваша нова система буде продаватися зсередини.
- Створюйте рамки так, як вам потрібно. Не починайте з будівництва, який я витратив на 6 місяців - це рамка, яка ніколи не бачила реального коду.
- Зберігайте технологічний стек якомога менше. Не надмірно розробляйте дизайн. Ви можете додати технології за потребою, але вийняти їх важко. Окрім того, чим більше у вас шарів, тим більше працювати розробникам. Не ускладнюйте рух.
- Залучайте користувачів безпосередньо до процесу проектування, але не дозволяйте їм диктувати, як це зробити. Завоюйте їх довіру, показуючи їм, що ви можете дати їм те, що вони хочуть краще, якщо ви будете дотримуватися принципів хорошого дизайну.