Modularność to podstawa, polecam w sumie książkę Mastering Modular JS – co prawda przeznaczona dla JS-a, ale zawiera też ogólne rozważania na temat dzielenia aplikacji na moduły i ogólnie dobierania poprawnie abstrakcji.
No i bardzo fajnie do zaplanowania interakcji między poszczególnymi elementami systemu sprawdzają się testy jednostkowe. Zasada kciuka przy nich jest taka, że jeśli czegoś nie da się sensownie potestować w izolacji, to istnieje spora szansa, że da się to napisać jakoś prościej.