Non sono sicuro che pensare a un problema in anticipo rispetto all'approccio iterativo sia contraddittorio l'uno con l'altro. Proprio come molte altre cose, penso che dovresti sforzarti di raggiungere l'equilibrio tra i due. Come trovi il saldo? È qualcosa che impari con l'esperienza e spesso le migliori lezioni del tempo (cioè roba che ti dà l'esperienza) è quando non hai capito bene (o anche una lezione migliore: è chiaro che hai sbagliato). Come hai già sottolineato, c'è un detto "rilascio veloce, rilascio frequente". Ce n'è un'altra simile, "fallisci presto, fallisci veloce, fallisci spesso "
Pensare in anticipo è grande e dovresti assolutamente farlo. Ma con l'esperienza, impara a smettere di pensare ea costruire qualcosa anche se non hai tutti i dati. Costruendolo, sarai in grado di ottenere maggiori informazioni sul dominio del problema e potenzialmente trovare una soluzione molto migliore. Quindi consiglierei di non escludere gli uni dagli altri, ma di fare una "testa pensante" parte delle tue iterazioni e nel tempo penso che troverai la risposta giusta a questa domanda da solo.
Solo un piccolo esempio. L'altro giorno stavo lottando con una decisione di progettazione del software. Col senno di poi era relativamente banale ma avevo due alternative e sembrava che entrambi avrebbero funzionato. Continuavo a tornare ai pro / contro di ognuno e poi tornavo indietro e riconsiderando le mie decisioni. Guardando indietro, è un po 'imbarazzante quanto tempo ho passato a pensare. Allora mi sono detto, f # @ k! E invece di usare uno dei due progetti, sono andato avanti e ho hackerato un po 'di codice insieme, ignorando completamente tutte le cose buone che hai imparato sul buon design. Ho fatto funzionare la funzione in circa 45 minuti. Poi sono tornato indietro, ho guardato il mio codice e l'ho rifatto in qualcosa di solido e qualcosa che non mi vergognerei di controllare nel controllo del codice sorgente. La parte divertente è che dopo aver ottenuto il trucco, per elaborare un "progetto corretto" sono necessari circa 15 minuti.
Un'altra cosa che consiglierei specificamente per i problemi che stai affrontando ora (cioè un'attività complessa e complessa che si profila all'orizzonte). Invece di fare le cose in serie, fallo in parallelo. Rompi la tua giornata in blocchi dove fai ricerche e poi fermati, cambia marcia e codice per un po ', almeno su parti del progetto che non sono complete sconosciute. In questo modo, rimanere vicino al codice ti darà una prospettiva migliore e non ti brucerai cercando di assorbire troppe informazioni troppo velocemente. Almeno per me, dopo poche ore di ricerca, è bene lasciare che il cervello digerisca le cose, cambi attività e faccia qualcos'altro per un po '. Quindi torna a ulteriori ricerche.