Звучит разумно, спасибо. Может, есть на примете такой набор критериев, чтобы использовать его как отправную точку?
Первыми в голову приходят SOLID, code smells, low coupling/high coherence - скорее всего эти критерии и так на слуху.
Еще по-идее, важно быть честным перед собой что-ли. В плане адекватности оценки серьезности проблемы и стоимости ее решения.
+ самый дорогой перфекционизм - архитектурный. Тут может помочь по возможности откладывание архитектурных решений (лучшее архитектурное решение - которое не были принято(с)).
Это решение можно будет принять позже, когда будет больше известно про систему, если мы напишем модули/компоненты так, чтобы изменение архитектуры затронуло их по-минимуму