Com sua pergunta, acredito que você está perguntando quanto desenvolvimento futuro será capaz de minimizar a quantidade de trabalho que um desenvolvedor de software terá que fazer. Mesmo se você tiver uma IA capaz de escrever todo o seu programa, ainda precisará dizer o que fazer, assim como para um fabricante de automóveis automático, ainda precisará fornecer um plano, e esse plano exige algum trabalho.
E se você tem uma IA, ainda precisa ensiná-la e ela terá que aprender através de vários projetos. Portanto, não acho que uma IA seja adequada para esse tipo de trabalho, mas uma abordagem mais determinística, usando geradores de código. Esses geradores de código podem se tornar muito complexos, mas não precisam necessariamente empregar aprendizado de máquina.
Dito isto, já existem pesquisas nas áreas denominadas Design de Software Orientado a Recursos e Design de Software Orientado a Aspectos. Eles lidam com a montagem de aplicativos de software, selecionando alguns recursos que deveriam ter e, em seguida, o código é gerado para isso. O objetivo é ter implementações para vários recursos que aparecem repetidamente em um domínio específico e montá-las como blocos de construção, conforme adequado para seu aplicativo específico. Para o desenvolvimento da Web, por exemplo, os recursos incluiriam transações, estatísticas, escalabilidade, criação de log e tudo o que você considere características características de diferentes aplicativos da Web.
Recursos e aspectos são diferentes dos componentes, pois geralmente são preocupações transversais. Tomemos, por exemplo, log. Você não pode simplesmente pegar uma biblioteca, incluí-la no seu aplicativo e dizer que possui o log agora. Você precisa espalhar suas chamadas de registro em todo o seu código, e é aí que os geradores de código são úteis. Eu ouvi recentemente sobre tudo isso nesta entrevista em duas partes na Rádio de Engenharia de Software .
Parece que esse tipo de pesquisa está na moda na Europa, e na Alemanha em particular, mesmo na indústria, como posso dizer por experiência própria. A geração de código pode ser útil para gerar o código de infraestrutura necessário, para que o desenvolvedor possa se concentrar exclusivamente na implementação do comportamento específico de seu aplicativo e não se preocupar com os mesmos problemas secundários em cada projeto diferente.
Resta ver quanto esse código específico do aplicativo pode ser reduzido. Certamente não pode ser eliminado completamente, apenas reduzido a algum tipo de projeto, como mencionei no começo.