Concordo que devemos manter as coisas simples, porém como vcs lidam com o seguinte cenário? Sua esquipe é formada principalmente por devs juniores e vc iniciou um novo projeto que ainda é incerto se vai crescer ou não. Se você faz as coisas simples vc entrega rapido e maravilha, porem o tempo passa o projeto da certo e chega um monte de requisitos novos que inevitavelmente caem na mãos dos dev juniores, e ai o bicho pega pq determinados requisitos requerem uma refatoração mais elaborada para o código nao comecar a ficar um caos. Se por outro lado no início do projeto vc cria uma estrutura mais elaborada fica muito mais facil dos dev juniores apenas seguirem o modelo e criarem os novos requisitos ja usando melhores praticas.

Qual solucao adotariam para esse cenário?

Acho que esse cenário, parece muito com a situação que se encontra um dos meu projetos atuais, por pressão o começo do projeto foi uma bagunça, agora estamos conseguindo impor um ritmo melhor no desenvolvimento e vamos ter q refatorar varias coisas.

O pensamento que tive foi, 'antes tarde do que nunca', pois quanto antes começar a refatorar e simplificar o código, mais rápido o cenário ideal chega!

É uma dor, refazer boa parte do sistema, mas são as dores do crescimento do sistema.