Tuesday, October 25, 2011

Night of the Living Manual

As I mentioned in my previous post, I have had some issues recently with SourceForge, so I shall be using that as my springboard into living documentation.

While attempting to discover how to add a member to my project, I tried exploring the site somewhat, and then finally gave up and looked at the help documentation.

Here is the link I found: http://sourceforge.net/apps/trac/sourceforge/wiki/Add%20a%20project%20developer

Needless to say, that did not work. If you check the history link for that page, it was last updated two years ago.

This goes into 'what is living documentation?'

Living documentation is documentation which is updated continually throughout the life of a software project. This includes things that the end user will see (user manuals, help files, support pages), and things that are internal to development (requirements documents, scope documents, defect tracking, test plans and test cases).

I feel like making a seasonal pun, feel free to skim past the next line.

You don't want to allow your documents to rest in peace, because more than likely, they'll rise back from their graves to bite you later (and I'm sure that becoming an undead document yourself would be a trifle inconvenient, not to mention painful).

Living documents help bring new team members up to speed quicker, and allow users to find out about new features or newly found bugs (and temporary work arounds) that might otherwise remain mysteries. They also keep you in compliance if you are working in a regulated industry. They also prevent inconsistent knowledge within a project. If Peter the Project Leader reads an old document, and assumes that feature x is still in, when Terry Team Lead had it removed two months ago, Peter will not be pleased when he finds out that he sold a non-existent feature to a client.

So, why is it that living documentation dies?

  • People get busy. Software teams aren't always staffed quite as well as they would like, and documentation sometimes falls by the wayside, especially if a lot of changes happen rapidly.
  • Documents get lost. This happens especially when teams are distributed, documents are passed around outside of any version control, or document control systems are changed (switching from word to a wiki, for instance)
To prevent these issues, you can designate someone on the team to have a recurring task to make sure that all of the documents are updated. You can also push people to get into the habit of updating documentation as soon as requirements change, bugs are found, or scope increases/decreases. And of course, nothing helps more than practice.

So, in a reverse of my last post, does anyone have examples of great documentation they have had the pleasure of using?

Bad UI Design, or "Wait, I can do that? Why didn't you say so before?"

So this is a topic near and dear to my heart for several reasons, and I'm talking (well, typing) about it now for a few reasons:

1. I've had issues with projects with terrible, bad, or just incredibly unintuitive UI design
2. I've recently tried to start a project on SourceForge, and found that I cannot seem to add another user to my project.

Why are these things frustrating for me?

  • Well, I use software, and when I can't find something I need on a website, in a program, or on my OS, I lose productivity and/or sanity (depending on the problem).
  • I also test software, as some of you may have figured out from the title (I pride myself on my subtlety), and a bad UI design not only sometimes makes it difficult to test (some non-standard GUIs are more difficult to automate than others), but I also consider these to be Usability bugs.
(As an aside here for those of you unfamiliar with the term, here is the wikipedia article on usability)

I consider usability to be one of the most important aspects of a program, right after and sometimes neck and neck with functionality, and attempt to push for these bugs to be fixed quickly.

The reason for this is fairly simple to demonstrate.

Think about the last time you went to a new website, or tried out a new program (alternatively, go to a new site right now, I'm sure you can find one soon. I'll wait. Back? Good.)

Was there one thing you wanted to do in your program, or one piece of information you wanted to learn from the site, that you just could not figure out? How long did you keep trying with that site or program? 2 seconds? 10 minutes? After a while, you give up.

And that means that the software failed. Whether it has the most miraculous features, the fastest, most efficient algorithms, it means nothing if your users can't find them, or can't figure out how to use them.

So, what was the last feature you tried to use that you just couldn't find/use?