Eu não considero que "um aplicativo deve ser totalmente explicado pelo seu próprio código", um princípio fundamental de programação. Há muitas e muitas coisas que não são explicadas apenas olhando o código de um aplicativo. Além de conhecer as coisas básicas da própria linguagem de programação (sintaxe e semântica), você precisa conhecer as convenções. Se um identificador em Java começar com uma letra maiúscula, é um tipo. Existem muitas dessas convenções que você precisa saber.
A convenção sobre configuração é sobre reduzir a quantidade de decisões que o programador deve tomar sobre as coisas. Para algumas coisas, isso é óbvio - ninguém consideraria ter uma linguagem em que a capitalização dos tipos é algo que você precisa declarar no topo do programa - mas, para outras coisas, isso não é tão óbvio.
A convenção e configuração de balanceamento é uma tarefa difícil. Muita convenção pode tornar o código confuso (use as variáveis implícitas do Perl, por exemplo). Muita liberdade do lado do programador pode tornar os sistemas difíceis de entender, uma vez que o conhecimento adquirido em um sistema raramente é útil quando se estuda outro.
Um bom exemplo de onde a convenção ajuda o programador ao escrever plug-ins do Eclipse. Ao olhar para um plugin que eu nunca vi, eu imediatamente sei muitas coisas sobre isso. A lista de dependências está em MANIFEST.MF, os pontos de extensão estão em plugin.xml, o código-fonte está em "src" e assim por diante. Se essas coisas dependessem do programador para definir, cada plug-in do Eclipse seria diferente, e a navegação por código seria muito mais difícil.