Для меня ещё важный момент —
измеряемость результата.
Если просто сесть городить код, то можно сдуться где-то в процессе, чисто из-за потери «энтузазизьма». И тогда либо проект бросается на полдороги, либо пургу начинаю гнать.
С этих позиций те же тесты немного помогают — видно более-менее, какую часть тестов я уже успел засатисфачить.
А ещё мне очень помогает планирование мелких задач в часах, идею у Джоэла Спольски почерпнул:
russian.joelonsoftware.com/Articles/PainlessSoftwareSchedules.html