На Хабре зачем-то вспомнили одну из статей Джоэла Спольски про "Вещи, которые вы никогда не должны делать". В ней Джоэл объясняет, почему разработчики склонны к переписыванию кода и что переписывание кода продуктов с нуля может обернуться катастрофой для компании. У меня же с переписыванием кода с нуля связано две истории.
Для одной из первых версий Parallels Desktop for Mac нужно было выпустить обновление с фиксами для виртуализации USB контроллера. Как водится, сборку с фиксами подготовили только под вечер. Нужно было протестировать и выложить на сайт. Вечер, в офисе только разработчик, который отвечал за виртуализацию USB, менеджер проекта, мой руководитель и я. Первая версия сборки: баги для хотфикса исправлены, но есть регрессия для ранее работающих устройств. Разработчик делает фикс, коммит, запуск сборки. Вторая версия сборки: один из багов для хотфикса начинает воспроизводиться, регрессия в плачевном состоянии. Разработчик делает фикс, коммит, запуск пересборки. Третья версия сборки: баги для хотфикса починили, регрессия не проходит. Разработчик чинит, мы все его ждём. Починка затягивается. Уже поздно и хочется домой. Выясняется, что вместо того, чтобы сделать исправления в существующем коде разработчик решил часть кода переписать с нуля! Мы тогда каким-то чудом выпустили обновления, но помню, что разработчику тогда из-за этого сильно влетело от PM.
Когда Parallels Desktop for Mac был уже популярным продуктом, то команда разработчиков решила перейти от монолитной архитектуры к клиент-серверной. Параллельно с поддержкой старой кодовой базы велась разработка новой версии силами нескольких человек. Не знаю сколько кода выкинули во время этого перехода, но такой переход был успешным и с тех пор у Parallels Desktop for Mac и Virtuozzo общая серверная часть.