Non sono sicuro che pensare a un problema in anticipo rispetto all'approccio iterativo siano contraddittori tra loro. Proprio come molte altre cose, penso che dovresti sforzarti di raggiungere l'equilibrio tra i due. Come trovi l'equilibrio? È qualcosa che impari con l'esperienza e spesso le lezioni migliori (ad es. Cose che ti danno esperienza) è quando non la capisci nel modo giusto (o lezione ancora migliore: semplicemente sbagli). Come hai già sottolineato, c'è un detto "rilascio veloce, rilascio spesso". Ce n'è un altro simile, "fallisci presto, fallisci velocemente, fallisci spesso"
Pensare in anticipo è fantastico e dovresti assolutamente farlo. Ma con l'esperienza, impara quando smettere di pensare e costruire semplicemente qualcosa anche se non hai tutti i dati. Costruendolo, sarai in grado di ottenere maggiori informazioni sul dominio problematico e potenzialmente trovare una soluzione molto migliore. Quindi ti consiglio di non escludere l'uno dall'altro, ma di rendere la "testa pensante" parte delle tue iterazioni e nel tempo penso che troverai tu stesso la risposta giusta a questa domanda.
Solo un piccolo esempio. L'altro giorno stavo lottando con una decisione di progettazione del software. Con il senno di poi è stato relativamente banale ma avevo due alternative e sembrava che funzionassero entrambi. Ho continuato a tornare indietro ai pro / contro di ciascuno e poi a tornare indietro e riconsiderare le mie decisioni. Guardando indietro, è un po 'imbarazzante quanto tempo ho trascorso a pensare. Poi mi sono detto, f # @ k! E invece di utilizzare uno dei due progetti, sono andato avanti e ho hackerato un po 'di codice insieme, ignorando completamente tutte le cose buone che impari sul buon design. Ho funzionato in circa 45 minuti. Poi sono tornato, ho guardato il mio codice e lo ho trasformato in qualcosa di solido e qualcosa di cui non mi vergognerei di controllare il controllo del codice sorgente. La parte divertente è che dopo che ho fatto funzionare l'hacking, ho escogitato "
Un'altra cosa che consiglierei specificamente per i problemi che stai affrontando ora (ad es. Compiti grandi e complessi che si profilano davanti). Invece di fare cose in serie, fatele in parallelo. Rompi la tua giornata in pezzi in cui fai ricerche e poi fermati, cambia marcia e codice per un po ', almeno su parti del progetto che non sono incognite complete. In questo modo stare vicino al codice ti darà una prospettiva migliore e non ti esaurirai tentando di assorbire troppe informazioni troppo velocemente. Almeno per me, dopo poche ore di ricerca, è bene lasciare che il cervello digerisca le cose, cambi i compiti e faccia qualcos'altro per un po '. Quindi torna a ulteriori ricerche.