COS 597E: Civic TechnologiesFall 2009 |
General information
Schedule Course Wiki |
Your plan should be realistic about what you can accomplish given the available time and resources. Success requires that you ship your product on time!
Your plan should have the following sections:
A good way to structure the functional spec is to work through a set of user scenarios, involving hypothetical users who want to accomplish something with the system. For example, if you were writing a functional spec for YouTube, you might use three scenarios: (1) Alice has made a video on her laptop and wants to publish it to the world; (2) Bob has heard about Alice's video and wants to watch it; (3) Charlie likes Alice's video and wants to embed it in his web page.
You don't have to give every last detail of how the scenarios will play out. Anything that would be obvious to a reasonable person can be left out. For example, you can say "Alice sets up an account on the system. This works like on most websites."
Diagrams are often helpful in the functional spec.
Another useful trick in writing a functional spec is to list non-goals. These are things that you have explicitly decided not to do. For example, if you are designing a rice cooker, you might specify "non-goal: cook anything other than rice". Non-goals are important because they keep the project focused on what is essential, and they solidify agreement within your team about what you are doing.
If your system will use interesting algorithms or data structures, talk about them here. Put in anything that a reasonably skilled engineer would need to know if you wanted them to build the system your way.
Diagrams are often helpful in the architectural spec.
Talk about any tools you will use for software development, testing, and version control. If you need advice on these, consult with other students who have experience developing larger class projects or commercial software.
Talk about any non-technology aspects of the system, such as documentation, help pages, FAQs, or privacy policy. What is your plan for producing these?
It's best to spread your milestones through the semester, rather than putting them all near the end, so think creatively about how to define testable milestones with early dates. In general, it's good to get a simplified system working early, then add advanced functions -- this protects you against the disaster scenario where the parts don't fit together at the end, leaving you unable to deliver any working product.
If you need to buy services from a hosting provider, Google AppEngine, Amazon EC2/S3 or the like, give cost estimates. Prof. Felten can help you find funding, if your costs are reasonable.