Как накидать логику работы будущей программы?
Вы не научитесь писать и проектировать программы, если самостоятельно не набьете на этом шишек.

Переписывание программы заново - нормальный процесс, называемый рефакторингом. "На берегу", еще до начала написания кода, вы не будете видеть все тонкости и нюансы. Так что хлопанье себя по лбу и отправка кода в корзину = нормальный творческий процесс разработки. 

После нескольких таких заездов по граблям вы получите опыт - ошибки и трудности, с которыми вы начнете сталкиваться будут такие, что ни в книге сказать, ни на StackOverflow прочитать.
Если проект очень важный, посмотри в сторону методологии TDD.