Ваш комментарий говорит о том, что у вас есть миллионы строк кода, но нет юнит-тестов, и что вам трудно убедить руководство в том, что юнит-тесты того стоят. Согласно книге Фаулера, рефакторинг должен сопровождаться юнит-тестами, чтобы обеспечить уверенность в том, что вы ничего не сломаете во время рефакторинга. Я бы согласился и предположил бы, что модульные тесты на этом этапе принесут больше пользы, чем что-либо еще, поэтому сначала стремитесь к этой цели. Я настоятельно рекомендую книгу Майкла Фезерса «Эффективно работать с устаревшим кодом» для предложений о том, как это сделать. Вам даже не нужно писать больше, чем несколько модульных тестов, чтобы это стоило усилий, просто запустите фреймворк.
Шаг 0: получите фреймворк для автоматизированного модульного тестирования, встроенный в ваш код.
Вы не собираетесь пытаться выполнить это в одиночку, не так ли? Это большой проект, и я ожидаю, что вы являетесь частью технической команды, которая разделяет с вами эту боль. Вы должны заставить их всех купить в этом 100%. Вам понадобится их поддержка, когда вы пойдете к своему боссу, вам понадобится их опыт, чтобы поделиться им при создании дизайна, и вам потребуется их полное согласие на дизайн.
Шаг 1: соберите отряд.
Без плана и цели рефакторинг мало чем поможет. Вы надеетесь просто разделить код и сделать модули меньше? Собираетесь ли вы организовать код в домены? Собираетесь ли вы втиснуть в него некоторые сервисные интерфейсы? Собираетесь ли вы провести рефакторинг для n-уровневой архитектуры? Что, по вашему мнению, и отряду необходимо сделать? И как вы собираетесь сообщить об этом плане проектирования и рефакторинга в SE?
Шаг 2: найдите способ выполнить первоначальный архитектурный проект и спланировать конечное состояние.
Теперь о трудной части. Вы просите 20% времени 30 инженеров, что, вероятно, превышает 500 000 долларов в год. Вам понадобится гораздо больше оправданий, чем «накопленный технический долг». Вам нужно будет показать окупаемость инвестиций.
Так что будьте готовы ответить на вопрос, который обязательно задаст ваш начальник: "Почему я должен?" Что вы ожидаете получить от рефакторинга? Сократите ли вы усилия по разработке новых функций на 10%? 100%? Будете ли вы повышать качество кода / уменьшать количество ошибок / уменьшать затраты на поддержку? Будете ли вы ускорить время выхода на рынок? На сколько? Позволит ли это уменьшить количество сотрудников SE или подрядчика? Как много? Или вы сможете добавить больше функций в каждом выпуске? Есть и минусы: сколько функций будет отложено, если вам дадут год, чтобы провести анализ с рефакторингом? На сколько они задержатся?
Шаг 3: сделайте серьезную оценку.
Итак, теперь, когда вы вооружены планом, планом, денежным обоснованием и у вас есть техническая поддержка, вернитесь к своему боссу и представьте свое дело ему или ей. Вам повезет гораздо лучше, чем сказать: «Мы должны потратить 20% нашего времени на рефакторинг, как говорили некоторые ребята в Интернете».