Абсолютно.
Реконструкція повинна здійснюватися на робочому та "прохідному" проекті. Коли всі ваші тести (на рівні блоку, системи та рівня приймання) пройдуть, ви знаєте, що ваш продукт відповідає вимогам. Після рефактора ви можете продовжувати підтверджувати, що всі тести продовжують проходити. Якщо якийсь тест починає виходити з ладу, значить, ви щось зробили не так і потрібно це виправити. Якщо у вас невдалі тести, слід виправити їх перед рефакторингом, щоб ви завжди могли переконатися, що рефакторинг не змінює функціональність системи.
Це також ідеальний час для рефакторингу, якщо припустити, що у вас є час та ресурси, щоб здійснити рефакторинг та все-таки доставити час та бюджет. Рефакторинг тепер полегшить розуміння та підтримку вашої системи, тому, як ви додасте ще нові функції, це стане простіше. Вам потрібно боротися проти гниття коду та ентропії програмного забезпечення .
Як в коментарях вказує Джоел Етертон , вам потрібно керувати сферою рефакторингу. Зосередьтеся на рефакторингу частин системи, до яких незабаром будете додавати функції, виконуючи рефактори, які полегшать роботу або додадуть нові функції. Використання статичного аналізу, інструментів метрики та огляду коду може допомогти вам визначити сфери, які є найбільш критичними. Ви не хочете пропускати терміни, оскільки ви займалися рефакторингом - вам все одно потрібно продовжувати додавати вартість клієнту.
Ви згадуєте, що клієнт не бачить цінності в рефакторингу. Зазвичай клієнт дбає не про якість коду, а про товар. Реконструкція дозволить вам простіше підтримувати високу якість продукції та продовжувати доставку товару, що відповідає мінливим потребам замовника. Спробуйте домовитись про час рефакторингу у свій графік (клієнт хоче X функцій за Y дні, спробуйте дізнатися, чи не можете ви отримати Y + Z днів або XN функції, щоб ви могли витратити час на розробку, рефакторинг та реалізацію), якщо ви може.