Unified theory of documentation systems
documentation.divio.com
documentation.divio.com
My documentation holy grail for large codebases is a codebase that starts with literate programming style programmer documentation, then pinned against tags to that structure is a programmer reference documentation, then pinned against that programmer reference are architecture, devops, and user reference, and cascading onwards to a fully-interlinked structure where the user manual is towards the "leafy edges", and demos/tutorials are all the way at the ending leaves. Smaller codebases can skip with "deep-linking tags" that just jump to say a man page or similar.
I basically want a Nix for documentation dependency management. Where if I change how some code behaves, I can see the vast majority of the documentation that change impacts.
The doc smell of a chaotically-organized documentation source: when the program version changes, every page in the old version when you try to switch to the new version says it cannot find an equivalent page and offers to jump you to the beginning of the new version documentation. I've heard this called "version aphasia". It is especially frustrating to discover that in the new version there is an exact section with the exact section title, organized in the exact same heading structure.
Documentation dependency management is still in the Precambrian era compared to source code, and we aren't doing so hot IMHO there, either.
2021-04-07: https://github.com/evildmp/diataxis-documentation-framework/... Add license CC-BY-SA 4.0
2021-04-30: https://github.com/divio/diataxis-documentation-framework/co... Copyright change from Danielle Procida to Divio
edit: fixed link
It's already a weakness of this "theory" that it leaves only the reference for documentation that's intended to be complete and correct, while also recommending that the reference be organised as a list of the available operations.
But this divio variant goes so far as to say that, when writing the reference, "don't allow explanations of concepts".
I believe good documentation often needs rigorous definitions of the concepts involved, not just a list of functions or configuration items or whatever.
So either the reference should have space for those, or the explanation should be in a more rigorous style, not a "more relaxed" discussion.
I have seen some projects try to keep the specs updated, even fewer that try to keep the specs/build/docs in sync via tagging and unique IDs.
If the specs were within this framework, my guess is they would go under reference; for example, an API spec would easily be kept in sync and would naturally go under the reference section. In fact, the example given is for a CLI:
At first blush, it seems to make sense. I'll review it, in my copious free time...