Eu estive pensando sobre este tópico por um tempo.
Minha conclusão é - não é uma questão de quantidade, mas de qualidade e contexto.
Por exemplo, uma estrutura de projeto adequada supera os comentários que explicam onde os arquivos estão localizados (implementação versus intenção)
Da mesma forma, a classificação para esclarecer o contexto supera a nomeação (Id em um paciente -> Patient.Id).
Acredito que o DDD tem voz na boa documentação - a classificação fornece contexto, o contexto cria limites e os limites levam a implementações intencionais (é aqui que ele pertence, e não precisa existir).
O código em si não é bom o suficiente para ser considerado documentação. O problema na maioria dos casos não reside no fato de o funcionamento dos códigos ser comentado ou não, mas a força motriz (lógica do domínio) não.
Às vezes esquecemos quem é o chefe - se o código mudar, a lógica ou o raciocínio do domínio não, mas se a lógica ou o raciocínio do domínio mudar, o código definitivamente mudará.
A consistência também é muito importante - a convenção por si só é inútil se não for consistente.
Os padrões de design não são apenas "boas práticas" - é a linguagem que os desenvolvedores devem entender. Dizer a um desenvolvedor para adicionar um novo tipo a um Factory é melhor compreendido do que adicionar um novo tipo a um método (onde o contexto e a consistência são fracos ou ausentes).
Metade da luta é familiaridade .
Em uma nota lateral, as APIs que parecem favorecer muita documentação também são muito sensíveis ao domínio e ao contexto. Às vezes, duplicar a funcionalidade não é ruim (mesma coisa, contextos diferentes) e deve ser tratado como separado.
Em termos de comentário, é sempre bom apontar a lógica do domínio por trás do raciocínio.
Por exemplo, você está trabalhando no setor médico. No seu método, você escreve "IsPatientSecure = true;"
Agora, qualquer programador decente pode descobrir que o paciente está sendo marcado como seguro. Mas por que? Quais são as implicações?
Nesse caso, o paciente é um preso que foi transferido com segurança para um hospital externo. Sabendo disso, é mais fácil imaginar os eventos que levaram a esse ponto (e talvez o que ainda precisa acontecer).
Talvez este post pareça filosófico na melhor das hipóteses - mas lembre-se de que você está escrevendo sobre 'raciocínio' ou 'lógica' - não código.