No que me diz respeito, quanto mais você mantém a documentação do código, maior a probabilidade de ela ser mantida atualizada e mais útil é provável.
É por isso que tento manter toda a documentação no mesmo repositório que o código, mesmo os manuais do usuário, e tento mantê-la em um formato de texto sem formatação que pode ser facilmente gerenciado por um sistema de controle de revisão.
Documentação no código
Parece que você já tem este assunto coberto, mas é importante lembrar que, na verdade, o uso dos recursos de documentação no ambiente de desenvolvimento escolhido ( pydoc para python, javadoc em java ou comentários xml em C #) é a técnica de documentação mais importante. Eles facilitam a escrita da documentação ao mesmo tempo que o código.
Se você confiar em voltar e documentar as coisas posteriormente, talvez não consiga contornar isso, mas se fizer isso ao escrever o código, o que precisa ser documentado ficará em sua mente. O C # ainda tem a opção de emitir um aviso de compilação se a documentação XML estiver incompleta ou inconsistente com o código real.
Testes como documentação
Outro aspecto importante é ter uma boa integração e testes de unidade.
Frequentemente, a documentação se concentra no que classes e métodos fazem isoladamente, ignorando como eles são usados juntos para resolver seu problema. Os testes geralmente os colocam em contexto, mostrando como eles interagem entre si.
Da mesma forma, testes de unidade frequentemente apontam explicitamente dependências externas através das quais as coisas precisam ser zombadas .
Também acho que, usando o desenvolvimento orientado a testes, escrevo um software que é mais fácil de usar, porque estou usando desde o início. Com uma boa estrutura de teste, tornar o código mais fácil de testar e fácil de usar geralmente é a mesma coisa.
Documentação de nível superior
Finalmente, há o que fazer em relação ao nível do sistema, arquitetura, desenvolvedor e possivelmente também documentação do usuário final. Muitos advogariam escrever essa documentação em um wiki ou usar o Word ou outro processador de texto, mas para mim o melhor lugar para essa documentação também é o código, em um formato de texto sem formatação, que é amigável ao sistema de controle de versão.
Assim como na documentação no código, se você armazenar sua documentação de nível superior no seu repositório de códigos, é mais provável que a mantenha atualizada. Você também obtém o benefício de que, ao extrair a versão XY do código, também obtém a versão XY da documentação. Além disso, se você usa um formato compatível com VCS, significa que é fácil ramificar, diferenciar e mesclar, assim como seu código.
Eu gosto bastante do primeiro , pois é fácil produzir páginas html e documentos PDF a partir dele, e é muito mais amigável que o LaTeX , mas ainda pode incluir expressões matemáticas do LaTeX quando você precisar.
Ao escrever código altamente matemático, também acho útil ter alguns documentos wxmaxima no meu repositório de projetos. Sendo texto simples, eles também ramificam, diferenciam e mesclam-se muito bem, mas o uso de um sistema de álgebra computacional pode ajudá-lo a verificar consistentemente suas fórmulas e a documentá-las.