A maioria, se não todas as pessoas de TI que conheço, acredita que é benéfico modelar software com UML ou outros tipos de diagramas antes da codificação. (Minha pergunta não é especificamente sobre a UML, pode ser qualquer descrição gráfica ou textual do design do software.)
Não tenho tanta certeza disso. O principal motivo é: o código não mente. É verificado pelo compilador ou intérprete. Esperançosamente, ele tem testes automatizados e precisa passar na análise de código estático. Se um módulo não faz interface corretamente com outro módulo, geralmente é óbvio no código porque você recebe uma mensagem de erro.
Tudo isso não pode ser feito com diagramas e outros documentos. Sim, existem ferramentas que verificam a UML, mas tudo o que vi até agora é muito limitado. Portanto, esses documentos tendem a ser incompletos, inconsistentes ou simpy false.
Mesmo se os diagramas em si forem consistentes, você não pode ter certeza de que o código realmente os implementa. Sim, existem geradores de código, mas eles nunca geram todo o código.
Às vezes, sinto que a obsessão com a modelagem resulta da suposição de que o código inevitavelmente deve ser uma bagunça incompreensível com a qual os arquitetos, designers ou outras pessoas bem pagas que entendem o cenário não devam lidar. Caso contrário, ficaria muito caro. Portanto, todas as decisões de design devem ser afastadas do código. O próprio código deve ser deixado para especialistas (macacos de código) que são capazes de escrever (e talvez ler), mas não precisam lidar com mais nada. Isso provavelmente fez sentido quando o assembler era a única opção, mas as linguagens modernas permitem codificar com um nível muito alto de abstração. Portanto, não vejo mais a necessidade de modelar.
Que argumentos estou faltando para modelar sistemas de software?
A propósito, acredito que os diagramas são uma ótima maneira de documentar e comunicar certos aspectos do design de software, mas isso não significa que devemos basear o design de software neles.
Esclarecimento:
A questão foi colocada em espera por não ser clara. Portanto, deixe-me adicionar uma explicação:
Estou perguntando se faz sentido usar documentos (sem código) que modelam o software como a principal fonte de verdade sobre o design de software. Não tenho em mente que uma parte significativa do código seja gerada automaticamente a partir desses documentos. Se fosse esse o caso, eu consideraria os próprios documentos como código-fonte e não como modelo.
Listei algumas desvantagens desse procedimento que me fazem pensar por que tantas pessoas (na minha experiência) o consideram a maneira preferível de criar design de software.