Переписування може бути дуже успішним, якщо правильно розмістити їх. Я не знаю, чи відповідають вони вашому порогу проектів "BIG" (TM), але дозвольте мені описати вам пару більш успішних переписувачів.
Проект 1
Компанія, в якій я працював, мала систему друку на полочках, яка використовувалась для створення етикетки, яку ви бачите на торгових полицях із чогось, що називається планограмою . Планограма була створена в стандартному програмному забезпеченні, і наші інструменти читали цей документ для створення смужок на полицях, використовуючи шаблон для цільового магазину. Програмне забезпечення для шаблонів було безладно з вкладеними машинами з кінцевим станом, які охоплювали кілька класів та 3 DLL. Коли прийшов час впровадження (тоді) патенту, який очікує на розгляд дощок для прив’язки, було зрозуміло, що чинний код не може підтримувати те, що ми хотіли зробити.
Рішення. Ми скористалися переписанням лише на двигун шаблону. Ми використовували належний дизайн OO, щоб подбати про поточні вимоги, а також вирішити нові вимоги до дошці. Час для переписування становив 1 місяць. Якби ми зробили масштабну перезапис цілого ланцюга інструментів, це зайняло б багато років - але нам цього не потрібно було робити.
Проект 2
Веб-додаток, яке наша команда розробила з нуля, починало переробити свій оригінальний дизайн. У нашого клієнта також був набір нових вимог, які б зробили сайт набагато кращим для наших користувачів, більш сумісним з "Web 2.0". Хоча ми могли вбудовувати свій існуючий дизайн у рамки, які ми мали, технічне обслуговування було кошмаром. Ми добре знали додаток, і ми знали, які деталі нам потрібно висувати і які частини відходити в рамках нової версії.
Рішення: Нашій команді знадобилося 3 місяці - це було не банально. Кінцевий продукт був швидшим, масштабованим та приємнішим для кінцевих споживачів. Ми перевершили очікування клієнта. Це означає, що нам довелося розділити нашу команду, щоб більш негайні виправлення помилок та патчі для надання допомоги на базі домовленостей були виконані в існуючій системі, а інша половина працювала над новою системою. Ми провели обширне тестування і включили на початку цього процесу. Причина, з якою це спрацювало так добре, полягає в тому, що ми тісно знали цю програму та нашого клієнта.
Проект 3
Я повинен включити сюди провал. Ми підтримували клієнта, який потребував інструменту управління інформацією для використання в умовах катастроф / криз. Ми успадкували додаток Java Swing, яке написали оригінальні розробники, не розуміючи Swing. Я маю на увазі, що вони не дотримувались рекомендацій Sun щодо належного поводження зі Swing та керування користувальницьким інтерфейсом, у результаті ви потрапляли у нескінченні цикли подій та інші дивні та важкі для відстеження проблеми. В результаті цього було завантажено помилок, проблем з інтерфейсом користувача тощо. Це було дуже складним додатком. Щоб зберегти наш розум, ми намагалися переписати погано написаний додаток Swing у добре написаний додаток Swing.
Рішення. Ми завершили перезапис приблизно через 4,5 місяці, коли ми оцінили 3 місяці. Додаток працював краще, як в інтерфейсі користувача, так і в кількості даних, з якою він може працювати. Тоді сталося цунамі 2004 року. Сама велика кількість людей, яких вони мали відстежити, показала, що Swing - це неправильна технологія для того, що їм справді потрібно. Ми не змогли йти в ногу з налагодженням своєї продуктивності, і вони врешті відмовилися від інструменту на користь спільного веб-додатка, створеного командою Oracle, яка була у них вдома. Впевнені, що ми могли б виправдати те, що ми зробили, базуючись на знаннях, які ми мали тоді, але переписування було недостатньо агресивним, і ми не змогли сказати нашому клієнту, що їх вимоги щодо кількості людей, які, можливо, могли б відстежити, були занадто низький.
Висновок
Іноді необхідні переписування , і вони можуть бути успішно виконані, якщо правильно спланувати. Ви можете отримати далі з цільовими переписуваннями для частин системи, ніж ви можете переписувати цілі продажу. Нарешті, те, що спричиняє збій проекту - не обов'язково переписується. Хоча ми ніколи не можемо бути ясновидими, ми можемо придумати деякі найгірші сценарії. Я навчився розробляти свої системи для підтримки вдвічі найгіршого сценарію, про який я можу придумати. У випадку із системою антикризового управління цього було недостатньо - фактична кількість була в 20 разів найгіршим сценарієм, який ми мали. Але це був не найгірший сценарій, про який ми могли придумати.
- Переписувачі заради переписувачів - не твій друг. Завжди багато складності, яку ви не бачите, і ви побачите, що потворні речі, які ви бачите, - це інструменти для навчання вашого клієнта. Завжди показуйте свій поточний прогрес своєму клієнту через регулярні проміжки часу, щоб він міг допомогти вам зловити найгірші правопорушення.
- Цільові переписувачі корисні для боротьби з найгіршими правопорушеннями у вашій кодовій базі. Не робіть перезапису, якщо ви можете обмежити сферу застосування та вирішити більшість своїх проблем.