Documentación en código
Lo más importante es utilizar las funciones de documentación en el entorno de desarrollo elegido, por lo que significa pydoc para python, javadoc en java o comentarios xml en C #. Esto facilita la escritura de la documentación al mismo tiempo que escribe el código.
Si confía en volver y documentar las cosas más tarde, es posible que no lo haga, pero si lo hace mientras escribe el código, entonces lo que necesita documentarse estará fresco en su mente. C # incluso tiene la opción de emitir una advertencia de compilación si la documentación XML está incompleta o es inconsistente con el código real.
Pruebas como documentación
Otro aspecto importante es tener una buena integración y pruebas unitarias.
A menudo, la documentación se concentra en lo que las clases y los métodos hacen de forma aislada, omitiendo cómo se usan juntos para resolver su problema. Las pruebas a menudo los ponen en contexto al mostrar cómo interactúan entre sí.
Del mismo modo, las pruebas unitarias a menudo señalan dependencias externas explícitamente a través de las cuales las cosas necesitan ser burladas .
También encuentro que usando el desarrollo basado en pruebas escribo un software que es más fácil de usar, porque lo estoy usando desde el principio. Con un buen marco de prueba, hacer que el código sea más fácil de probar y que sea fácil de usar a menudo es lo mismo.
Documentación de nivel superior
Finalmente, hay qué hacer con el nivel del sistema y la documentación arquitectónica. Muchos recomendarían escribir dicha documentación en una wiki o usar Word u otro procesador de textos, pero para mí el mejor lugar para dicha documentación es junto al código, en un formato de texto sin formato que sea amigable con el sistema de control de versiones.
Al igual que con la documentación en código, si almacena su documentación de nivel superior en su repositorio de código, es más probable que la mantenga actualizada. También obtiene el beneficio de que cuando extrae la versión XY del código, también obtiene la versión XY de la documentación. Además, si utiliza un formato compatible con VCS, significa que es fácil ramificar, diferenciar y fusionar su documentación, al igual que su código.
Me gusta bastante reStructuredText (primero) , ya que es fácil producir tanto páginas html como documentos pdf usando sphinx , y es mucho más amigable que LaTeX , pero aún puede incluir expresiones matemáticas de LaTeX cuando las necesite.