This article, based on my experience, demonstrates approach of organizing documentation in your project aiming following:
I am in software development for more than decade now. I used to work in a different teams and on different projects, including the one, that was transferred on support from other teams and even companies.
On of the biggest and most usual problems faced were lacking of project documentation. In number of situations it was cause of the longer time needed to take ownership over project. This is not usually failure of the team, sometimes documentation is just not included into budget.
That’s why I always tried to include portions of the knowledge for future support (even for myself in a few months or years)
Most often we are working with subset of diagrams, which are called informally 4+1 architectural view set, i.e.
Development view: Component, Package Logical view: Activity, State, Class Physical view: deployment Process: Activity, BPMN Scenarios: Use Case
In a bigger projects, usually project manager decides what visualization packages are used depending on his experience. I used to draw diagrams in MS Visio, Edraw, yEd, Openoffice Draw, also number of online tools like Gliffy, Lucida charts, draw.io etc.
Common issue I had — is constant feeling, that I would draw them much easier with pencil and scan afterwards. On some more complex diagram set another question I had was also “Hey how did I spend my working day today” :) As diagrams also need to be constantly updated as software evolves, it was sometimes hard to track differences in proprietary binary formats or even constantly check diagrams differences online (like Gliffy, where versioning is supported). On some projects we had google docs with number of diagram file versions uploaded. If project used Confluence — it was probably the best case of ever possible. On some projects we had just wiki provided by bitbucket …
For a quite long time I was looking for consistent approach, how to keep my diagrams sources as simple as possible. Basically I had very basic set of requirements:
Let me share with you current state of my findings:
Site: http://www.plantuml.com/
Dependencies: java, GraphViz package
Diagrams supported: UML set & a bit more
Tool is able to draw full set of UML diagrams, which makes it almost ideal, although your sales person probably will not be happy from look. But for purposes of documentation they are perfect:
But what is great, is that diagrams sources are pure text:
This allows you to put them together with code, for example as a block comment to your module, easily track changes in a source control system, etc
Tool has number of integrations with variety of software: http://plantuml.com/running from IDE, to wiki or confluence.
You can try interactively how to draw diagrams now at https://www.planttext.com/ or view few pre-created diagrams at http://bit.ly/plantdiag
Site: http://www.blockdiag.com/
Dependencies: python 2+ Diagrams supported: blocks, sequences, activity, network, rack, packet structure.
Activity diagram, for example, looks a way better than one generated by plantUML
Compared to PlantUML diagrams look better, but cons are that number of options is much lower. From other hand, there are some specific kind of diagrams, like packet structure, rack or just graphs — that make this tool ideal.
Site: http://www.sphinx-doc.org/ Dependencies: python 2+
Pros: universal, including your own custom code to build the pages
Cons: plugins matter
PlantUML and Blockdiag are perfect tools, and can be used on their own, to generate diagram images that you insert into your wikis afterwards.
But if you are looking for a full cycle solution for your project documentation — take a look on Sphinx doc.
This is universal solution to be engine of project documentation for project of any size, and my compete with wiki, confluence, and similar tools
Output formats: HTML (including Windows HTML Help), LaTeX (for printable PDF versions), ePub, Texinfo, manual pages, plain text
Extensive cross-references: semantic markup and automatic links for functions, classes, citations, glossary terms and similar pieces of information
Hierarchical structure: easy definition of a document tree, with automatic links to siblings, parents and children
Automatic indices: general index as well as a language-specific module indices
Code handling: automatic highlighting using the Pygments highlighter Extensions: automatic testing of code snippets, inclusion of docstrings from Python modules (API docs), and more
Contributed extensions: more than 50 extensions contributed by users in a second repository; most of them installable from PyPI
Per my humble opinion, pros are:
At that moment I can’t skip cons you should take into consideration:
When I say, that “ReadTheDocs” theme is a cons — I mean, that probably the only existing fully adapted theme for documentation is the one you saw hundred of times:
As a result of experimenting I came with solution based on tools demonstrated above. The demo of the deployed artifact probably tells more than a few paragraphs: http://labs.voronenko.info/ProjectDocs/
Github: https://github.com/voronenko/projectdocs
“Ready to go” configuration : either in form of local install (plantuml & blockdiag need to be installed in the system) or via Docker (alpine based with a small footprint) — it allows to start your documentation project in less than hour.
You can have dedicated repository for project documentation project, if your project consist of few repositories, or you can just have a documentation branch in scope of project code repository
If you make use of gitflow or similar code approach, you would benefit from the same flow in documentation project — pull request, code review, release…
Boiler plate includes:
You fully control how and where you build your project. Boiler plate supports:
You have full control where and how you deploy your documentation.
Boiler plate supports deploy with Ansible (jenkins, bamboo, etc) and includes draft of ansible play to do so. Example for gitlab is also included.
For local build, solution also supports such build artifacts like mobi, epub and pdf — which allows you to publish your documentation in a offline form and distribute together with your solution