@Overskill
Ich schreibe mir vorher so genau wie möglich auf und mache mir Skizzen, was ich eigentlich machen will, damit ich mich nicht während des Programmierens in unnötigen Details verliere oder es plötzlich in eine ganz andere Richtung geht.
Mit z.B. PencilProject fertige ich GUI-Skizzen an, nicht nur für die Hauptoberfläche an sich, sondern auch für z.B. Overlay-/ Popup-Menüs, um zu sehen, ob meine Idee auch praktisch noch akzeptabel aussieht.
Dann überlege ich mir ein paar User-Stories / Szenarien: Welchen "Weg" geht der Nutzer durchs Programm? Wie kann er Aktion x/y ausführen und was passiert, wenns schief geht?
Bei den Klassendiagrammen arbeite ich gern mit verschiedenen Farben, bzw. ordne die Klassen gleich in Schichten an:
Ganz unten ne Datenbank (is eigentlich aus nem Deployment-Diagramm, aber mir passts hier ganz gut) mit Entity-Klassen, darüber Services, darüber Controller (also Vermittler zwischen GUI und Services), ganz oben das GUI-Gedöhns.