Step N: Deliverables

Posted

Let’s skip ahead to the last step: wrapping up. For most students, and most assignments, this means handing the work in and getting a grade. But course projects are different:

  1. They often roll forward from one term to the next, so the end of one team's involvement isn't necessarily the end of the project; and
  2. Course projects are meant to simulate real life, where delivery of a particular version is just another step in the product lifecycle.

In the past, I have asked teams to write a final report, which has been worth either 40% or 50% of their grade. These reports have ranged from a dozen to 50 pages, depending on the size and enthusiasm of the team. Typically, they have had the following sections:

As you can see, this report is neither a user’s guide nor maintenance documentation. Instead, it is like the end-of-contract reports I had to prepare when I was a consultant. What had I done to earn my customers’ money? What should the next person (who might not be me) do? What could I tell them that would save them time? Internal documentation (like Javadoc) doesn’t help with these questions, and anyway, the team should be producing that as they go along, not all in a rush at the end of term.

So, that’s what I’ve done in the past. This term, I’m going to try something different. Inspired in part by Karl Fogel’s Producing Open Source Software, I’m going to ask students to prepare some combination of the following:

  1. An attractive home page, with a two-sentence mission statement and a few paragraphs or bullet lists to help newcomers orient themselves.
  2. An FAQ.
  3. An architectural overview, including block diagrams of the major components and a walkthrough of the processing cycle.
  4. An installation guide.
  5. An evaluation similar to those that have been included in previous terms' reports.

All but the last will be written as DrProject wiki pages, so that the next team can pick up right where their predecessors left off. I hope this will give students a better feeling for what it would be like to work on a real long-lived project.

I’ll close with a few quotes from Fogel’s book:

…many projects don't bother to standardize their installation procedures until very late int he game, telling themselves they can do it at any time: "We'll sort all that stuff out when the code is closer to being ready." What they don't realize is that by putting off the boring work of finishing the build and installation procedures, they are actually makingg the code take longer to get ready… Boring work with a high payoff should always be done early. (pg. 26)
The importance of a bug tracking system lies not only in its usefulness to developers, but in what it signifies for project observers. For many people, an accessible bug database is one of the strongest signs that a project should be taken seriously. Furthermore, the higher the number of bugs in the database, the better the project looks. This might seem counterintuitive, but remember that the number of bugs recorded really depends on three things: the absolute number of bugs present in the software, the number of users using the software, and the convenience with which those users can register new bugs. Of these three factors, the latter two are more significant than the first. (pg. 26)
The ability to write clearly is perhaps the most important skill one can have in an open source environment. In the long run it matters more than programming talent. A great programmer with lousy communication skills can only get one thing done at a time, and even then may have trouble convincing others to pay attention. But a lousy programmer with good communication skills can coordinate and persuade many people to do many different things, and thereby have a significant effect on a project's direction and momentum. (pg. 121)