Documentation - Why?
M2. Maintenance typically consumes about 40 to 80 percent (60 percent average) of software costs. Therefore, it is probably the most important life cycle phase. … M5. Most software development tasks and software maintenance tasks are the same—except for the additional maintenance task of “understanding the existing product.”” This task is the dominant maintenance activity, consuming roughly 30 percent of maintenance time. So, you could claim that maintenance is more difficult than development.
Robert L. Glass “Frequently Forgotten Fundamental Facts about Software Engineering” http://www.eng.auburn.edu/~kchang/comp6710/readings/Forgotten_Fundamentals_IEEE_Software_May_2001.pdf
That is, you likely want to make it cheap to understand your system by writing good documentation.
For the same reason, you want to write good, i.e., correct and up-to-date documentation, as “Bad documentation is worse than no documentation.”, see Mikey Ariel https://www.youtube.com/watch?v=FopnpwK6ALw&list=PL8uoeex94UhGGUH0mFb-StlZ1WYGWiJfP&index=106 at 10:35.
Your turn!
Leaf through the following documentation on three popular bug- or issue- tracking systems.
- Trac https://trac.edgewall.org
- Bugzilla https://www.bugzilla.org
- Mantis https://www.mantisbt.org/docs/master/en-US/Admin_Guide/html/
Have a closer look to the installation and administration documentation.
- Note down what you think makes the given administrator documentation valuable and what might be missing or could be improved about it.
- Importantly, note if you feel that this documentation would allow you to setup and administer any of the three systems.
- Reflect on what precisely in the given documents enables you to setup and administer these systems.
http://www.techrepublic.com/blog/10-things/10-things-you-can-do-to-create-better-documentation/
Handover Documentation
We are focusing on technical documentation. That is, documentation written for other technology savvy people, such as maintainers or operators responsible for running and operating your system or for developers that might want to contribute to your work.
It is important that you think about who is the audience you are writing to. As said, in this semester it is technology savvy people. However, there are many different kinds of people who might want to read your documentation and you have to adjust your writing style as well as the level of technical detail to them accordingly.
Typical target groups might be:
- Managers
- Users
- Operators
- Developers
- Academics
- Politicians
As you can see theses groups have different backgrounds. More importantly, they have different roles in society. If you want to transport a message to your target group you have to try to talk their language.
Handover Documentation in General
You write handover documentation when you are done with a piece of work and you want to enable others to take over and to continue from where you stopped.
In general that matters when you switch to another project or job and you want to assure that your work was not for nothing.
Emma Cragg describes in her blog:
For specific pieces of work:
- a brief description
- a list of actions (with timeframes if possible)
- links to files, emails, or any useful information that can be found elsewhere.
- the status of the work. Is it a current piece of work or just for information in case it comes up again?
- details of who else knows about it or has input into it
- any deadlines or milestones
And more generally:
- a list of contacts
- details of any upcoming meetings or events
- a list of key information sources, e.g. websites, blogs, social media accounts
- usernames and passwords for relevant accounts
http://digitalist.ekcragg.co.uk/2013/12/10/the-art-of-writing-handover-notes/
Technical Handover Documentation, the Wisdom of the Community.
However, we have to write technical handover documentation. That is, documentation that allows others to operate our systems, report issues, react on errors, etc.
There does not seem to be any proper template for this kind of information. But various others in your situation were looking for it and got advice along the lines of:
- System overview, general introduction
- processes and interdepartmental process flow
- system configuration, setup and dependencies
- technical requirements, features and limitations
- support process
- escalation lists and contact information for relevant parties for troubleshooting
Having been on both sides of this process professionally, I can say that the following should be mandatory:
- the documentation of the code (javadoc, doxygen, etc)
- details on build process
- where to get current source
- how to file bugs (they will happen)
- route to provide patches either to the source or to customers
- how it works (simple, but often overlooked)
- user-customizable portions (eg there is a scripting component)
- primary contacts for each component, aka escalation path
- encouragement for feedback from Support as to what else they want to see I’m sure lots of other things can be added, but these are the top priority in my mind.
In the past, I’ve done:
- Flowcharts. Knowing where the data is entering and leaving the system is key to understanding it.
- A wiki for documentation. It’s useful because it’s simple to edit, it’s going to stay in one place (multiple copies of documentation = disaster) and if other devs down the road see a problem with it, they’re likely to fix it right away as well.
- Set up a code walkthrough. If you have the time, do it AFTER you have the documentation in place, so if there are any questions, you can update the documentation appropriately. If there isn’t time, still at least give them the walkthrough.
Technical Handover Documentation, LSD Style.
Condensing all the above to our school scenario, you want to document for sure:
- System overview, general introduction
- Your systems architecture: Which components run on which machines.
- How to access the various machines, with which credentials, keys, etc?
- Dataflow within your system, within and across components.
- How to file bug reports and issues?
- How to restart certain components?
- How to get information about the inner state of your system, such as databases, log files, etc.
- And others
Docu DevOps
Treat your documentation like code.
- Use a machine readable markup format
- Generate the documentation in formats, such as HTML, PDF, etc., with another build action, just as you build your code.
Technologies for Writing Documentation
More References
- https://opensource.com/business/15/5/write-better-docs
-
http://www.writethedocs.org/guide/writing/beginners-guide-to-docs/
- http://www.techrepublic.com/blog/10-things/10-things-you-can-do-to-create-better-documentation/
- http://cnx.org/contents/qofD1eNQ@2.4:YGS4ul3S@4/
- https://kingsinsight.com/2011/02/10/agile-documentation-handover-to-production-support/