Le cycle que vous décrivez est normal. La façon d'améliorer les choses ne consiste pas à éviter ce cycle, mais à le rationaliser. La première étape consiste à accepter que:
- Il est presque impossible de tout savoir le premier jour d'un projet.
- Même si vous savez tout, à la fin du projet, quelque chose (les exigences du client, son marché, la technologie avec laquelle vous travaillez, les souhaits de ses clients) aura changé et sera pris en compte à au moins une partie de ce que vous saviez invalide ou incorrect.
Par conséquent, il est impossible de tout planifier à l'avance, et même si vous le pouviez, suivre ce plan vous conduirait à construire quelque chose d'imparfait ou d'obsolète. Sachant cela, nous intégrons le changement dans notre planification. Regardons vos pas:
- Commencez avec quelques cas d'utilisation
- Commencer à coder
- Réalisez quelques choses que je n’ai pas bien manipulées et qui ne s’intègrent pas bien dans le code actuel.
- Réécrire la majeure partie du code
C'est en fait un excellent point de départ. Voici comment je l'aborderais:
1. Commencez par quelques cas d'utilisation
Bien. En disant « cas d'utilisation », vous vous concentrez sur ce que le logiciel est pour . En disant "quelques", vous n'essayez pas de tout découvrir; vous vous en tenez à une quantité de travail gérable. Tout ce que j'ajouterais ici, c'est de les hiérarchiser. Avec votre client ou utilisateur final, trouvez la réponse à cette question:
Quel est le logiciel le plus petit et le plus simple que je pourrais vous proposer pour améliorer votre situation?
Il s'agit de votre produit minimum viable - une solution plus petite ne vous sera d'aucune aide, mais une solution plus grosse risque de trop planifier trop tôt. Obtenez assez d'informations pour construire cela, puis passez à autre chose. Soyez conscient que vous ne saurez pas tout à ce stade.
2. Commencez à coder.
Génial. Vous commencez à travailler dès que possible. Jusqu'à ce que vous écriviez du code, vos clients n'ont reçu aucun avantage. Plus vous passez de temps à planifier, plus le client a passé longtemps à attendre sans aucun remboursement.
Ici, je voudrais ajouter un rappel pour écrire un bon code. Rappelez-vous et suivez les principes SOLID , écrivez des tests unitaires décents autour de tout ce qui est fragile ou complexe, prenez des notes sur tout ce que vous risquez d'oublier ou qui pourrait ultérieurement causer des problèmes. Vous souhaitez structurer votre code afin que les modifications ne causent pas de problèmes. Pour ce faire, chaque fois que vous prenez la décision de créer quelque chose de cette façon plutôt que de cette façon, vous structurez votre code de sorte que le moins de code possible soit affecté par cette décision. En général, un bon moyen de le faire est de séparer votre code:
- utilisez des composants simples et discrets (en fonction de votre langue et de votre situation, ce composant peut être une fonction, une classe, un assemblage, un module, un service, etc. une classe avec beaucoup de fonctions ou un assemblage avec beaucoup de classes)
- chaque composant effectue un travail ou des travaux relatifs à une chose
- les changements apportés à la manière dont un composant effectue son fonctionnement interne ne devraient pas entraîner le changement d'autres composants
- composants doivent être donnés choses qu'ils utilisent ou dépendent, plutôt que de chercher de ou créer les
- les composants doivent donner des informations aux autres composants et leur demander de faire le travail, plutôt que de chercher des informations et de faire le travail eux-mêmes
- les composants ne doivent pas accéder, utiliser ou dépendre du fonctionnement interne des autres composants - utilisez uniquement leurs fonctions accessibles au public
En procédant ainsi, vous isolez les effets d'une modification afin que, dans la plupart des cas, vous puissiez résoudre un problème à un endroit donné et que le reste de votre code ne le remarque pas.
3. Rencontrer des problèmes ou des lacunes dans la conception.
Cela va arriver. C'est inévitable. Accepte cela. Lorsque vous rencontrez l'un de ces problèmes, décidez quel type de problème il s'agit.
Certains problèmes de votre code ou de votre conception compliquent la tâche du logiciel. Pour ces problèmes, vous devez revenir en arrière et modifier votre conception pour résoudre le problème.
Certains problèmes sont causés par le manque d'informations ou par quelque chose auquel vous n'aviez pas pensé auparavant. Pour ces problèmes, vous devez contacter votre utilisateur ou client et lui demander comment il souhaite résoudre le problème. Lorsque vous avez la réponse, vous devez alors mettre à jour votre conception pour la gérer.
Dans les deux cas, vous devriez être attentif aux parties de votre code qui ont dû être modifiées et au fur et à mesure que vous écrivez plus de code, vous devriez penser aux parties qui devront éventuellement être modifiées à l'avenir. Il est ainsi plus facile de déterminer quelles parties pourraient être trop interconnectées et quelles parties pourraient nécessiter une plus grande isolation.
4. Réécrire une partie du code
Une fois que vous avez identifié la manière dont vous devez modifier le code, vous pouvez procéder au changement. Si vous avez bien structuré votre code, il ne faudra généralement modifier qu'un seul composant, mais dans certains cas, cela peut également nécessiter l'ajout de certains composants. Si vous constatez que vous devez changer beaucoup de choses dans de nombreux endroits, réfléchissez à la raison. Pourriez-vous ajouter un composant qui conserve l'intégralité de ce code, puis que tous ces emplacements utilisent simplement ce composant? Si vous le pouvez, faites-le, et la prochaine fois que vous devrez modifier cette fonctionnalité, vous pourrez le faire à un endroit.
5. Test
Une cause fréquente de problèmes dans le logiciel est la connaissance insuffisante des exigences. Ce n'est souvent pas la faute des développeurs - souvent, l'utilisateur n'est pas sûr de ce dont il a besoin. Le moyen le plus simple de résoudre ce problème consiste à inverser la question. Au lieu de demander "que devez-vous faire par le logiciel?", Chaque fois que vous suivez ces étapes, donnez à l'utilisateur ce que vous avez construit jusqu'à présent et demandez-lui "J'ai construit ceci - est-ce qu'il fait ce qu'il vous faut?". S'ils disent oui, alors vous avez construit quelque chose qui résout leur problème et vous pouvez arrêter de travailler! S'ils refusent, ils pourront vous dire plus précisément ce qui ne va pas avec votre logiciel, et vous pouvez aller améliorer cette chose en particulier et revenir pour plus de commentaires.
6. apprendre
Tout au long de ce cycle, faites attention aux problèmes que vous rencontrez et aux changements que vous apportez. Y a-t-il des modèles? Pouvez-vous améliorer?
Quelques exemples:
- Si vous continuez de constater que vous avez négligé le point de vue d'un utilisateur donné, pouvez-vous le faire participer davantage à la phase de conception?
- Si vous continuez à avoir à changer des choses pour être compatibles avec une technologie, pourriez-vous créer quelque chose d'interface entre votre code et cette technologie afin que vous n'ayez qu'à changer d'interface?
- Si l'utilisateur change constamment d'avis sur les mots, les couleurs, les images ou d'autres éléments de l'interface utilisateur, pouvez-vous créer un composant qui fournisse au reste de l'application celles-ci de manière à ce qu'elles soient toutes au même endroit?
- Si vous constatez que bon nombre de vos modifications concernent le même composant, êtes-vous certain que ce composant ne concerne qu'un seul travail? Pourriez-vous le diviser en quelques morceaux plus petits? Pouvez-vous changer ce composant sans avoir à en toucher d'autres?
Être agile
Vous vous dirigez vers un style de travail appelé Agile. Agile n’est pas une méthodologie, c’est une famille de méthodologies incorporant une foule de choses (Scrum, XP, Kanban, pour n'en nommer que quelques-unes), mais ce qu’elles ont en commun, c’est l’idée que les choses changent et que nous, développeurs devrait prévoir de s’adapter aux changements plutôt que de les éviter ou de les ignorer. Certains de ses principes fondamentaux - en particulier ceux qui sont pertinents pour votre situation - sont les suivants:
- Ne planifiez pas plus loin que ce que vous pouvez prédire avec confiance
- Faites en sorte que les choses changent au fur et à mesure
- Plutôt que de construire en même temps quelque chose de grand, construisez quelque chose de petit, puis améliorez-le progressivement
- Impliquez l'utilisateur final dans le processus et obtenez des commentaires rapides et réguliers
- Examinez votre propre travail et vos progrès et tirez les leçons de vos erreurs