I want to start my project by dividing up the various things the system needs to do, then put them into the order I plan to approach them. I want to start with requirements that are the most risky and most important to success first, and work my way down the list until I finish with items that are neither risky nor important.

This approach gives me several advantages. It’s not an issue in this case since I don’t have any deadlines to meet, but if this were a professional project and a deadline had to be pushed up, I am more likely to have a product that does the most essential things. If I had a fixed deadline and the project starts running long, I’m more likely to have a working product that’s just missing a few less important features. In an ideal world those don’t happen, but at the end of the project the parts that were risky and/or essential have had the most time to be tested and fine-tuned as the application matures.

I could just charge in and write some code, and sometimes the results can turn out okay, but in my experience it never saves time. If anything, it just increases the chance that the project will fail. On the other hand, I don’t want to do too much design up front. I will know more and more about the problem space the further I get into the project, so the further back I can push parts of the design, the more likely I am to get them right, or at least be close,the first time.

After a couple days of thinking and fooling around with the list, here is what I end up with in the general order I plan to approach them:

  1. Receive event invitations by email and send an acceptance email.
  2. Record accepted invitations, and send a rejection email when a new invitation conflicts with an existing one.
  3. If an event is cancelled, remove it from the record.
  4. If an event is rescheduled, try to accept the new time and remove the previous time.
  5. Receive invitations for multiple resources.
  6. Users can view the schedule for resources.
  7. Administrators can view, add, edit, and remove resources or change other options for the service.
  8. Save free/busy information for all resources in a format compatible with MS Outlook.
  9. The schedule for a resource can be retrieved in the iCal format.