Ich kann Jonathan_Klein eigentlich nur zustimmen.
Wenn man vorhat, von Anfang an alles perfekt und sauber zu gestalten, ist das zwar ein edler Vorsatz, jedoch weit von der Realität entfernt - vor allem, wenn man noch keine Erfahrung in solchen Projekten hat. Jedoch sollte das nicht heissen, dass man sich wie Nox gleich drauf los stürzen sollte, ohne etwas zu planen, sonst - wie er selber andeutet - ist das Chaos sicher.
Gerade in der objektorientierten Programmierung ist es wichtig, dass man sich zuvor einen Überblick über das Design macht. Welche Klassen benötigt man? Wie stehen diese in Beziehung zu einander? Wie stehts mit Vererbung und Polymorphie? Wer übernimmt Grafikaufgaben? Solche Fragen sollte man sich am besten stellen, bevor man mit Programmieren beginnt. Man sollte auch Wert darauf legen, dass das Programm sauber und strukturiert geschrieben wird, da dies die Wartung und allfällige Erweiterung stark erleichtert.
Klar kann man nie alles im Voraus wissen, aber es sollte schon eine gewisse Vorstellung davon vorhanden sein, wie das Projekt ungefähr aufgebaut sein soll. Es wird so oder so passieren, dass etwas nicht nach Plan läuft; nicht zuletzt, weil man vereinfachend geplant hat und sich etwas in der Praxis nicht 1:1 umsetzen lässt. Auch dann gilt es, während des Programmierens in Ruhe zu überlegen, wie man solche Dinge am besten mit dem Rest des Projekts in Einklang bringen könnte. In solchen Situationen tendiert man schnell dazu, eine Frickellösung zu finden (im Glauben, diese sei nur von temporärer Dauer). Es geht nicht lange, bis dann der weitere Code auf diesem Gefrickel aufbaut und man sich bereits weit entfernt von seinem ursprünglichen Ziel wiederfindet, ohne etwas davon zu merken. Da lohnt sich etwas investierte Zeit für eine saubere Lösung auf jeden Fall.
Aber irgendwann sollte man auch noch zur Implementierung kommen. Wie gesagt, wird man kaum ein Projekt erstellen können, in dem alle eigenen Vorstellungen eintreffen. Man lernt immer dazu und kann sich beim nächsten Projekt bereits besser vorbereiten. Erfahrung ist eben nicht zu unterschätzen.