Tu peux commencer par établir un cahier des charges, avec la liste des fonctionnalités de ton projet.
En fonction des besoins tu choisis une architecture (MVC par exemple), les libs dont tu penses avoir besoin, etc.
Ensuite tu commences à créer un modèle, par exemple avec UML : diagramme de classes, d'états-transitions, de séquence, etc.
C'est à toi de voir si tu veux modéliser juste les points principaux ou si tu préfères vraiment tout penser en amont, quitte à devoir tout modifier au premier imprévu.
Si ton projet est conséquent, je t'invite aussi à regarder du coté des tests unitaires/tests de non-régression afin de vérifier le fonctionnement de ton application.