Суть то в том, что сразу невозможно написать. Пока не наговнокодил и наконец не поймёшь как это всё скомпоновать?
Постепенно начнешь интуитивно определять какой код придется переписывать, а какой вряд ли придется менять. Код всегда меняется, несмотря на качество)