O desenvolvimento de software ainda é percebido como algo empírico, mesmo com avanços como ferramentas IDE (Integrated Development Environment) e aplicação de técnicas como Scrum. Uma das possíveis causas dessa sensação estaria no fato de que programação ainda é muito influenciada pelo estilo de quem a executa.
Uma possibilidade para se buscar maior previsibilidade na codificação é o uso de geradores de código. Com eles abre-se a possibilidade de aplicar experiências de outros ramos de engenharia àquela que é denominada engenharia de software (ou de computação). Por exemplo, através do scaffolding é possível criar código de forma padronizada, a partir de uma especificação.
Hoje já existem recursos como o Entity Data Model que constroem toda um mapeamento objeto-relacional a partir de DSL (Domain Specific Language) que representa visualmente um domínio de problema. Entretanto apesar de esforços como MDA, ainda há oportunidades de evolução para se chegar ao ponto de que construir um software será equivalente à fazer um prédio ou montar um carro, usando plantas e outros desenhos técnicos.
O ideal era que se conseguisse um DSL capaz não apenas de refletir os requisitos a serem atendidos por um software como até mesmo os recursos necessários para executá-lo. Daí poderia-se chegar num nível de abstração alto o suficiente para que apenas os desenvolvedores dos geradores de código necessitassem conhecer linguagens de programação. E o uso de uma linguagem ou outra seria em função dos recursos de infraestrutura disponíveis e não da capacitação dos analistas envolvidos no desenvolvimento do software.