Это действительно соблазнительно для проекта, как вы описали, выбросить старый код и переписать, но это почти всегда ошибка (см. http://en.wikipedia.org/wiki/Second-system_effect. ссылки в конце относительно переписываний неоценимы, особенно http://chadfowler.com/2006/12/27/the-big-rewrite).
Я предполагаю, что у вас нет реального набора тестов, иначе было бы легче отследить проблемы, и у вас, вероятно, был бы меньший проект, так как хорошо протестированные проекты, как правило, хорошо продуманы ( хотя не всегда). Это очень усложнит повторную реализацию и даст вам уверенность в том, что вы реплицировали всю функциональность и что любые зависимости хорошо работают с «новым и улучшенным» кодом.
И если ваши пользователи получают ошибочные результаты, я бы рискнул сказать, что вы на самом деле не знаете, в чем проблема, так что переписывание не решит эту проблему.
Когда я беру на себя проект, подобный этому, первый шаг - написать набор тестов для определения характеристик, документирующих способ работы системы в НАСТОЯЩЕЕ ВРЕМЯ. Часто при этом вы обнаруживаете часть функциональности, которая не имеет смысла или не соответствует остальной части системы - это может быть, где ваша проблема. Пройдя этот этап, мы можем приступить к рефакторингу уродливых частей, очистке представлений, перемещению логики в то место, к которому она принадлежит, удалению мертвого кода и т. Д. Но эти тесты действительно важны, если вы хотите сохранить работу системы.
Наконец, установите разумные ожидания для себя. Подобные проекты не превращаются в беспорядки в одночасье - вы не можете исправить их и в одночасье.