Je ne suis pas sûr que penser à un problème à l'avance par rapport à une approche itérative soit contradictoire. Comme beaucoup d'autres choses, je pense que vous devriez vous efforcer de trouver l'équilibre entre les deux. Comment trouvez-vous l'équilibre? C'est quelque chose que vous apprenez avec l'expérience et souvent les meilleures leçons (c'est-à-dire des choses qui vous donnent de l'expérience), c'est quand vous ne comprenez pas tout à fait bien (ou encore une meilleure leçon: tout simplement à fond vous trompez). Comme vous l'avez déjà souligné, il y a un dicton "libérez rapidement, libérez souvent". Il y en a un autre, "échouer tôt, échouer rapidement, échouer souvent"
Penser à l'avenir est formidable et vous devez absolument le faire. Mais avec l'expérience, apprenez quand arrêter de penser et simplement construire quelque chose même si vous n'avez pas toutes les données. En le construisant, vous pourrez mieux comprendre le domaine problématique et potentiellement trouver une bien meilleure solution. Je recommanderais donc de ne pas exclure l'un de l'autre mais de faire de la "tête pensante" une partie de vos itérations et avec le temps, je pense que vous trouverez vous-même la bonne réponse à cette question.
Juste un petit exemple. L'autre jour, je me débattais avec une décision de conception de logiciel. Avec le recul, c'était relativement trivial mais j'avais deux alternatives et il semblait que les deux fonctionneraient. J'ai continué à tourner autour du pour / du contre de chacun, puis à revenir en arrière et à reconsidérer mes décisions. Avec le recul, c'est un peu gênant le temps que j'ai passé à réfléchir. Alors je me suis dit, f # @ k it! Et au lieu d'utiliser l'une ou l'autre des conceptions, je suis juste allé de l'avant et j'ai piraté du code ensemble, ignorant complètement toutes les bonnes choses que vous apprenez sur une bonne conception. J'ai réussi à faire fonctionner la fonctionnalité en 45 minutes environ. Ensuite, je suis retourné, j'ai regardé mon code et l'ai transformé en quelque chose de solide et quelque chose que je n'aurais pas honte de vérifier dans le contrôle de code source. Le plus drôle, c'est qu'après que le hack ait fonctionné, de trouver "
Une autre chose que je recommanderais spécifiquement pour les problèmes que vous rencontrez actuellement (c.-à-d. Une tâche importante et complexe qui se profile). Au lieu de faire les choses en série, faites-les en parallèle. Divisez votre journée en morceaux où vous effectuez des recherches, puis arrêtez-vous, changez de vitesse et codez pendant un certain temps, au moins sur des parties du projet qui ne sont pas des inconnues complètes. De cette façon, rester proche du code vous donnera une meilleure perspective et vous ne vous épuiserez pas en essayant d'absorber trop d'informations trop rapidement. Pour moi au moins, après quelques heures de recherche, il est bon de laisser le cerveau digérer des choses, changer de tâche et faire autre chose pendant un certain temps. Revenez ensuite à plus de recherches.