Нужно уметь управлять техническим долгом, называется "программная инженерия", там и жизненный цикл ПО изучается и прочие вещи. Рефакторить нужно всегда, в каком количестве - зависит от того, как тех. долгом управляешь. Плюс - соблюдать правило бой-скаута: оставлять код в который ты пишешь изменения чище, чем он был до этого. Насчёт фреймворков - если у тебя серъезный долгоиграющий проект, то писать нужно фреймворконезааисимо. Начать смотреть в эту сторону можно на примере вот этого видео
https://youtu.be/6tL1XOywgUc