Ok, eu já me deparei com isso muitas vezes, mas aqui está o pior cenário, um pouco exagerado.
Um cliente diz "ei, você pode nos tornar esse pequeno módulo para fazer essa pequena tarefa"?
Eu: "Claro que não há problema".
Portanto, com base em orçamentos, restrições, etc., pulo parte da arquitetura e mergulha direto e não suporto.
Então eles pedem outro módulo. E outro. E algumas melhorias. E tudo isso acontece muito lentamente, durante anos. E antes que você perceba, você tem esse aplicativo monstro que é horrivelmente arquitetado.
O que você faz quando lhe pedem para fazer algo pequeno? Você não sabe se ele continuará crescendo ... se o cliente continuará pedindo acréscimos (e nem eles).
Você não pode arquitetar demais a coisa, porque afinal é apenas um aplicativo pequeno, e eles irão para outro lugar se você disser (no sentido de que conheço toda a voz) "Bem, só para garantir, vamos arquitetar essa coisa em camadas com top segurança e separação de preocupações. De fato, vamos usar uma ferramenta de injeção de dependência que realmente tornará essa coisa fantástica blá blá blá ".
Eles vão dizer "sim, certo" e vão para outra pessoa.
Orçamento, tempo e percepção são tão importantes quanto a arquitetura do próprio aplicativo.
Como isso deve ser abordado?
Eu acho que a pergunta realmente se resume a "Quando você não tem todas as informações para o resultado final do que parece ser um aplicativo pequeno, como você evita (ou atenua) a tomada de decisões arquiteturais e de design desde o início?" inapropriado mais tarde?