« Back to New Code Example Page on developer.ebay.com | Return to Main | Ahead to Love For P-Language Coders »
How To Document Your Open-Source Tool
I've been poring over the documentation of various open-source tools for the past few years and have collected some thoughts on the subject. All these things seem (to me) like they should be no-brainers, but I see these things come up again and again and it's maddening to me. I desperately want to like a project, but then I see there's no documentation and I think to myself "I'll take another look at this in eighteen months, maybe."
For all the technology we have at our disposal, people still like to read words strung together in the form of sentences. They do this to learn about what you're working on. If you don't have the ability or the patience or the skill to string together sentences, make friends with someone who can, and imitate them. (Step one involves reading a lot.) Failing that, try your best to do your own documentation, no matter how much you know your efforts suck, and get the input of someone who can edit well and give you constructive feedback. I've written and co-authored six books and I'm still in awe of some of the editors and other writers who influenced and helped me.
Here are my rules:
First, if your open-source application does not have documentation, or if the documentation is so sparse as to be useless to someone not intimately familiar with the inner workings of your application, your application is not done.
Second, every software product evolves over time. This is why they call it software (as opposed to carved-into-granite-wear). But the documentation, paradoxically, must describe the state of the software at a single moment in time. Do not get wrapped around the axle describing the fifteen-year history of your product, or how it will work when the next dot-point release comes out. Describe how it works today.
Third, the source code is not the documentation. This is the same thing as saying that because you have a stack of DVDs containing the raw output of the human genome project on your desk, you have a good sense of what your next-door neighbor wants for lunch.
Fourth, if you are using an online group authoring tool such as a wiki (etc.) to create your documentation, great. You still need editing. You still need organization. You probably need an index and a table of contents unless your documentation is incredibly brief.
Fifth: Online browsing is not sufficient. You will need a way to let me download your documentation. You need a way to let me commit your documentation to dead trees so I can read it on a bus.
Sixth: However you choose to author it, your documentation should not contain markup, embedded comments by anonymous users, emoticons, or misspellings.
Seventh: Separate yourself from your agenda and focus on what's useful. Feel free not to cover 100% of the functionality of the system in the first five pages of your documentation. Have the courage to say what sucks about your product. This is one reason why the best technical books on commercial software are often written by people outside the company. I can think of a few open-source tools where people who were very close to the project didn't write the best book on it.
Eighth: Make it very easy for users of your documentation to provide feedback, and be gracious when they do so. Do not reject feedback because it doesn't conform to your paradigm in some petty way. (A few years ago I volunteered to write complete documentation for a little tool that shall remain nameless and the owner of the project said "oh, sure," and proceeded to insist that I begin by hacking up a buttload of XML documents that he'd painstakingly been cobbling together, and that there was no possible way that anyone could contribute to the documentation effort in any other way because to do so would invalidate his incredibly complicated build script. Um, no.) Microsoft figured the feedback thing out in a big way in the last few years — every page of the .NET Framework SDK documentation has a contextual link that lets you submit a documentation bug, and if you submit a docs bug, you get a "thank you" from a real live person in email within a few hours. This is important because it lets the bug reporter know they're being listened to, which makes them more invested in the tool, which makes them more likely to contribute bug reports in the future.
I'm sure that five more rules will occur to me as soon as I hit the Save button.
December 20, 2004 in Open Source | Permalink | Digg This! | Post to del.icio.us!
Comments
Thanks for the suggestions. It's great to have someone else saying the same thing.
Posted by: TM | Jan 3, 2005 5:54:40 AM
Thanks for the suggestions. It's great to have someone else saying the same thing.
Posted by: TM | Jan 3, 2005 5:54:41 AM
What about the power-users who complain that they want the product now and they'll wait on the documentation? I don't think its fair to hold it back for the benefit of the newbies who ignore the warnings that there's no/little documentation. Plus, then you get the benefit of those power-users contributing to the docs.
Just a thought.
Posted by: Mary | Jan 31, 2005 12:01:17 PM
I didn't suggest that the project should somehow withhold its work because the docs aren't perfect, although I guess my post was a little light on concrete suggestions for actions to take to resolve these problems.
Why limit documentation contributions to power users? Why not create a framework that makes it easy for anybody to contribute to the docs? My sense is that the tools for helping distributed workgroups create documentation isn't even close to the level of maturity of developer tools in general. Wikis, while nice, aren't it. Mailing lists and message boards, while vital, aren't it either.
Posted by: Jeffrey McManus | Jan 31, 2005 12:18:47 PM
I think that, to kick start any sort of collaboration that is worthwhile, you do need a set of user docs initially. That way you at least have a common starting point instead of a melee of different topics and writing styles and ... oy!
Not 100% sure I agree with Point 5. Very few users will download and print an entire manual, let alone read one. The option to print relevant topics is probably higher up the priority list for most people.
Navigation and location are also key. Early on there is a habit for people to store information all over the place, it fast becomes a "you need to know where to look to find it" problem.
I'd probably go as far as to suggest some sort of content specification is produced, listing all tasks and concepts that need to be covered - sometimes it can help focus the developers minds as well and you can weed out extraneous functionality.
Posted by: Gordon | Jan 31, 2005 4:46:13 PM
Ohh yes. And DO give terminology and consistency some thought and try and drive things back into the software (hint: never use a verb to name a control).
Posted by: Gordon | Jan 31, 2005 4:47:07 PM
For a good breakdown of the document-creation process, check out "The Complete Idiot's Guide to Technical Writing." Sure, those little orange books may generate a natural aversion at first, but don't let the word "Idiot" in there fool you. They should really be retitled to "The Straightforward Guide to....." The tech writing guide discusses important concepts as consistency in wording, active voice, and text formatting.
For example, if you are going to use "click" to mean move the cursor to a button and click the mouse button, use that each time in the document. Don't say "Click PRINT" in one area and "Select PRINT" in another if you're referring to the same action both times. Such redundancy is all but beaten out of us in high school English classes, but it is a blessing to the reader of technical documentation who may already be confused (hence why they're looking at the documentation). No need to muddy the waters up even more by changing terms on them.
Also, be consistent with formatting such as text. If you use Times New Roman to write most of your document, but use Garamond when writing out code in the text, don't use Garamond later for headers or such.
These are just a couple of the concepts that go into solid technical writing.
Posted by: Ethan Reese-Whiting | Feb 17, 2005 2:48:21 PM
Hi there,
Your font size is too small to read, even on a 800x600 screen.
Regards...
Posted by: notImportant | Feb 26, 2005 9:41:15 PM
Interesting thoughts. I will take them in consideration! :)
What would be interesting to discuss is "What documentation to write to help developers hack the software / build a developer community?" ; what kind of diagrams to draw, etc. even if it obviously is very dependent of what the software is doing...
Posted by: matt | Jan 6, 2008 5:41:19 PM
The comments to this entry are closed.