Não tenho certeza de que pensar sobre um problema antes da abordagem versus a abordagem iterativa sejam contraditórios entre si. Assim como muitas outras coisas, acho que você deve se esforçar para alcançar o equilíbrio entre os dois. Como você encontra o equilíbrio? Isso é algo que você aprende com a experiência e, muitas vezes, as melhores lições (ou seja, coisas que lhe proporcionam experiência) é quando você não entende direito (ou uma lição ainda melhor: simplesmente entenda errado). Como você já apontou, há um ditado "libere rápido, libere com frequência". Há outro semelhante: "falhe cedo, falhe rápido, falhe frequentemente"
Pensar no futuro é ótimo e você deve absolutamente fazê-lo. Mas com a experiência, aprenda quando parar de pensar e criar algo, mesmo se você não tiver todos os dados. Ao construí-lo, você poderá obter mais informações sobre o domínio do problema e potencialmente encontrar uma solução muito melhor. Portanto, recomendo não excluir uma da outra, mas fazer da "cabeça pensante" parte de suas iterações e, com o tempo, acho que você encontrará a resposta certa para essa pergunta.
Apenas um pequeno exemplo. Outro dia, eu estava lutando com uma decisão de design de software. Em retrospectiva, foi relativamente trivial, mas eu tinha duas alternativas e parecia que as duas funcionariam. Continuei circulando de volta aos prós / contras de cada um e, em seguida, circulando de volta e reconsiderando minhas decisões. Olhando para trás, é um pouco embaraçoso quanto tempo passei pensando. Então eu disse para mim mesmo, f # @ k it! E, em vez de usar qualquer um dos designs, eu apenas fui em frente e hackeei alguns códigos juntos, ignorando completamente todas as coisas boas que você aprendeu sobre um bom design. O recurso funcionou em cerca de 45 minutos. Depois voltei, olhei para o meu código e o refatorei para algo sólido e algo que não me envergonharia de verificar o controle de origem. O engraçado é que, depois que o hack funcionou, surgiu "
Outra coisa que eu recomendaria especificamente para os problemas que você está enfrentando agora (ou seja, tarefas grandes e complexas à frente). Em vez de fazer coisas em série, faça-as em paralelo. Divida o seu dia em partes onde você pesquisa e depois para, troca de marcha e código por um tempo, pelo menos em partes do projeto que não são incógnitas completas. Dessa maneira, ficar próximo ao código fornecerá uma melhor perspectiva e você não se queimará ao tentar absorver informações demais rápido demais. Para mim, pelo menos, depois de algumas horas de pesquisa, é bom deixar o cérebro digerir coisas, alternar tarefas e fazer outra coisa por um tempo. Depois, volte para mais pesquisas.