You must form 3 to 4 person groups. We generally suggest forming 4 person groups in case one member decides to drop the class, but the workload is just fine for a 3 person group too. If you are coming into the class without a group, please use the pinned Piazza thread to find group members. It is your responsibility to find a group by the group signup date. If you do not find a group, you will not be able to take the class.
Once you have formed a group, do the following things:
- Make sure everyone has an account form and has registered the account by signing in.
- Exchange necessary contact information (email, phone number, etc).
- Share your GitHub usernames (or create an account if you don't have one yet).
You will complete four projects throughout the semester. Each project follows the same format:
- [10 pts] Initial design
- [10 pts] Design review
- [60 pts] Code (3 checkpoints)
- [20 pts] Final design
- [0 pts] Peer Evaluation
Notice that your code is only worth 50% of your project grade!
In the first phase of the project, you will create and submit a design document to be reviewed by your TA.
- You have not made any egregious mistakes or misunderstanding of the project
- You have a reasonable mastery of the skeleton code and the concepts of the project you are attempting to implement.
The initial document must be no longer than 7 pages maximum, in a readble font size (no less than 11, please.) If you violate this parameter, your TAs will go blind, and you will be penalized.Sample initial design doc
To make sure that you have a sane design, you should meet with a TA to review your design. These meetings will be held around ten days before the due date of the final handin, and should take around 20-25 minutes. In addition you will turn in your final design document reflecting the actual implementation one day after the final code handin is due (might not change from the design review document if you design well).
As these projects are fairly open-ended, we'll have weekly check points to ensure that you're on the right track. Each project lasts for three weeks. The first two deadlines are soft(-ish): you don't lose too many points for turning it in late, slip hours cannot be used for checkpoints 1 and 2. Each checkpoint will be a increasingly large chunk of the code. We understand that the first checkpoint is due before the design review so we usually pick a non-design heavy isolated portion of the code as the first checkpoint this is to encourage you guys to actually start early!
Additionally, the documentation you provide during your first two weeks is considered to be a work-in-progress. We are expecting that you'll make some changes to your design during implementation and that you'll need to change your tests to accommodate interesting cases you discover while trying to make things work. That said, you'll be penalized for any major design changes. In other words: your design document needs to be a good-faith effort and reasonably resemble what you build, otherwise you haven't really done a design document.
If you miss a checkpoint deadline then you can submit working code up until the final deadline for 90% credit. Note that all the checkpoints require you to submit partial functionality so you'll probably have to end up doing the work anyway in order to do the next checkpoint.
50 points of your project grade will be fully determined by an autograder. For projects 1 and 2 the majority of the test cases will be provided to you, this is because writing test cases for an actual operating system are really really hard, and we don't want you to go crazy trying to figure it out. For the last project (which is in java), you will be expected to write your own Junit tests.
Your final design will be worth 30 points of your total project grade. This will be due a day after checkpoint 3 for the code. Please note this is a significant portion of your grade and this is not just an evaluation of your final design document, for more information please visit the design page
We ask you to fill out a quick survey after each project describing each project member's contribution to the project. This ensures accountability within the group.