Actually there is no “every program that needs this” list, because absolutely nothing that every program requires.
Some tips, however: don't “make it work,” then “add fault tolerance.” Protective programming and error reporting should be an integral part of development. This is much simpler (and usually more efficient) if you consider errors and unexpected input when writing a piece of code, and not after it has been executed.
Regarding whether you need to make a GUI first, answer this question: is the most important aspect of the program what it does or what it looks like? This is a serious issue, which, frankly, can vary from application to application (although this is usually the first, more important).
, "-" ( , , , ), , .
, , - .
. ( Wikipedia), , " ".