Pour moi, cela aide à décomposer un plus gros logiciel en plus petits morceaux. Et puis divisez ces morceaux en parties encore plus petites et ainsi de suite. Chaque logiciel est une collection de petits morceaux de logique.
Prenons l'exemple d'un blog. Vous voulez pouvoir créer et éditer des articles que d'autres peuvent lire. Vous pouvez immédiatement diviser le projet en sections d'administration et publiques. L'administrateur aura au minimum besoin d'administrateurs, d'une page de connexion et d'une section pour gérer le blog. La section de gestion du blog peut être décomposée en une interface CRUD (Créer, Lire, Mettre à jour, Supprimer). La création d'un nouveau billet de blog nécessitera une vérification pour vous assurer que l'utilisateur administrateur dispose des privilèges appropriés, d'un formulaire, d'une validation de formulaire et de la possibilité d'enregistrer dans la base de données. Etc.
Plus vous décomposez un problème ou une fonctionnalité, plus elle devient gérable. C'est diviser pour mieux régner. Une fois que vous avez pu cartographier votre logiciel comme celui-ci, vous pouvez voir comment ses différents éléments interagissent les uns avec les autres. Où pourriez-vous répéter le code? Qu'est-ce qui peut être abstrait? Cela devrait être un processus itératif à la fois lorsque vous planifiez et que vous écrivez le code lui-même.
Je recommanderais de déterminer votre ensemble de fonctionnalités minimum pour commencer et de l'implémenter avant d'y ajouter d'autres éléments. Vous voudrez coder défensivement afin que les modifications futures ne soient pas trop difficiles, mais en même temps, vous ne voulez pas implémenter des demi-fonctionnalités qui ne seront peut-être jamais terminées. C'est une ligne difficile à parcourir entre rester flexible et être prêt à tuer impitoyablement vos chéris, à emprunter une référence littéraire. Être bon dans cet exercice d'équilibre particulier ne vient que de l'expérience.
Et c'est de cela qu'il s'agit, comme l'ont mentionné les autres réponses: l'expérience. La seule façon de l'obtenir est de commencer. Ne vous inquiétez pas tellement de le rendre parfait dès le départ. Faites d'abord fonctionner le code, puis rendez-le beau, puis faites-le rapidement.
De plus, contrairement à ce paragraphe, n'insistez pas sur la sécurité à la fin comme une réflexion après coup. Vous devriez avoir une idée des façons dont votre logiciel pourrait être compromis, mais pour commencer, ne faites confiance à aucune entrée d'utilisateur.