Был у меня однажды ооочень большой легаси. В какой-то момент любые изменения стали дорогими и тяжёлыми. С помощью подсчетов, собранных примеров, мрачных прогнозов и красивых презентаций удалось получить бюджет на рефакторинг. А дальше из огромного монолита аккуратно выпиливали кусочки и впиливали новое решение. Это очень долго, технически сложно, но зато без остановки сервиса и все такое. В итоге, после замены корной части боль снизилась и бюджеты тоже, в итоге процесс растянулся на многие годы.
Из полученного опыта:
- без обоюдного желания команды и бизнеса прям никак. Видел примеры без обоюдного - было больно и грустно. Бабло все же побеждает зло.
- еще нужны сформулированные цели, зачем это все. Предприятие рискованное, сложное, если цели нет, может получиться рефакторинг ради рефакторинга. Поэтому имеет смысл относиться к этому, как к бизнесовой задаче, считать ROI (хотя бы попытаться)
- взять и переписать с нуля большой и сложный продукт - почти не видел успешных случаев (как правило тестов нет, требования утеряны, такой кучи денег нет). Хотя нет, один был: достаточно денег, очень заинтересованный бизнес и крутая инженерная команда. Но там я только рядом стоял, наверняка были подводные камни.
- Аккуратное распиливание монолита, дублирование функций работает, но это дорого и долго. Если продукт большой, то это может быть очень дорого и очень долго, поэтому нужны п1 и п2