Modularisierung ist denke ich ein kritischer Punkt wenn du den Ueberblick nicht verlieren moechtest.
Durch Modularisierung kannst du eine grosse Menge an Code als eine Einheit betrachten, was es einfacher macht den groben Ueberblick zu behalten. Du musst nicht ueberlegen wie jede Codezeile mit der anderne interagiert, sondern kannst die interaktion zwischen Modulen betrachten die tausende von Codezeilen zusammenfassen.
Modularisierung macht auch viele anderen Aspekte einfacher. Du kannst z.B. das Modul separat vom Rest der Anwendung entwickeln und testen oder automatisierte Tests (Unit tests / etc) schreiben. Fuer manche Module ist es oft auch sehr hilfreich zuerst tests zu schreiben und dann das modul zu implementieren (test-driven development), z.B. bei abstrakten Matheproblemen kann das sehr viel einfacher sein als das ganze im Spiel selbst zu testen.
Was vorausplanen angeht... es ist definitiv hilfreich, aber ich wuerde mich nicht zu sehr darauf versteifen. Selbst mit Jahren an erfahrung kann man nicht 100% korrekt planen, man wird frueher oder spaeter waerend der Entwicklung umstrukturieren muessen.