My least favorite thing to do with any software project is write the documentation. Part of this is just because documenting software is hard. In order to document the software, I have to go back to the use cases that I may or may not have listed to start with, and iteratively develop a document that addresses each of those cases, at least implicitly.
The second issue is that I don’t have a method for writing documentation. I don’t have a nifty toolkit of preset TeX macros to create the appropriate diagrams. And since I do everything in TeX these days, that’s a real shortcoming. But more than the tool, there’s just the basic method. How to approach the document? What kind of document is it? What assumptions can be made about the deployment? What assumptions can be made about the end user?
Even in situations where I’ve controlled the deployment and personally known all the potential end users, I’ve written documentation that either wasn’t read or wasn’t understood. And that resulted in a lot of lost manpower, because tasks that should have been automated were instead being done by hand, with the inevitable mistakes.
I remember showing a guy an automation script that would take his document, create an optimized pdf from it, and save the pdf in the correct folder with the correct name. Granted, this would only save him about 2 minutes a document, about 8 or 9 clicks, and a certain number of mistakes, but it was one key press. I showed him the keypress. “Click F5″, I said. “That’s it?”
“What’s the difference between doing that and just saving the PDF?” He asked me.
That’s the biggest challenge to instituting any change, anywhere. “Just”. What’s the difference between learning a new keyboard shortcut and “just” clicking through at least two dialog boxes and navigating about 8 layers of file structure. The old way is always easy, is always “just”. You have to create a sense of excitement about the new thing, and that’s hard to do when it doesn’t really affect people directly. A guy in a chair in one department doesn’t understand how his mistakes might effect someone else in a another department, and he doesn’t care how they affect the bottom line overall.
Sure, you can demand that the new system be instituted. But now you’ve just created resentment, not excitement.
I’m not sure how this relates to the documentation problem. Maybe I’m not seeing the value in learning something that will help me document. Or maybe the documentation should excite people, and therefore I should be excited about writing it. Or maybe part of the problem with writing documentation is the sneaking suspicion that no one will ever read it.