CMU 15-112: Fundamentals of Programming and Computer Science
Class Notes: Term Project Assignment
Due: Thu 7-Dec at 4:30pm (no late submissions accepted)


See the Term Project Gallery for examples!

Note: this is a long document. But: you really need to read all of it, very carefully, before starting any of it. You are about to invest serious effort creating the capstone project for this course. You need to take the time to carefully read and understand everything in this document before you get started.

Also, this project is meant to be educational but also good fun. Enjoy, and work hard!!!


  1. Description
  2. Schedule
  3. Policies and Rules
  4. Deliverables
    1. TP1
    2. TP2
    3. TP3

  1. Term Project Description

    Your task is to design and implement a program of your choosing. You must program in Python unless your chosen task absolutely requires another language for some compelling reason (in this case you must also obtain written instructor permission to pursue such a non-Python project). Your project may be graphical, text-based, or even file-based. It may be a game, or a math or science application, or a baseball statistics package, or a productivity application (think Word or Excel, only very "lite" versions), or a shell script, or anything else you choose. This is a wide open assignment, and you are expected to be creative in your approach to it.

    Also: you may use any materials, including any Python libraries (like vpython or Blender or Panda3d or processing-python-mode for 3d graphics, or PyGame for richer 2d game support, or pyMedia or pyAudio or aubio for multimedia, or numpy and scipy or sympy for scientific computing, etc, etc, etc). You should understand that using such materials requires that you train yourself on their use (presumably through online materials). TA's and instructors will try to assist as we can, but you should expect less direct support if you use libraries that we did not cover in class.

    Each of you will be assigned a Mentor TA for your term project. While every staff member is happy to help you at any time, it is expected that your Mentor TA will provide most of your support and guidance during the course of your term project. Also, your Mentor TA will be grading your term project. You are encouraged to discuss your grade with your Mentor TA during the course of the term project, so you know where you stand and what additional work may be required to improve your grade.

    You have an extended period to finish this assignment, with no other required assignments during the last three weeks. You are expected to invest at least 30 total hours into this project in this time, and it is further expected that your project will clearly reflect the quantity and quality of design and craftsmanship that goes along with that much time on this task. Naturally, most of you will exceed the 30-hour bar, but this is a minimum expectation for passing the term project.

  2. Schedule

    There will be multiple deadlines associated with the Term Project. This is your guide to all of them!

    Mon Nov-6 to Thu Nov-9: Attend a TA-Led Optional Lecture (see Hw11)

    Fri Nov-10 at 8pm: Fill out the Mentor Preference Form (see Hw11)

    Mon Nov-13 at 8pm: Receive Mentor Assignments

    Fri Nov-17 at 8pm: Meet with your mentor for TP0 (to receive project idea approval)

    Sun Nov-19 at 8pm: If applicable, meet with your mentor for Tech Demo (see Policies and Rules)

    Tue Nov-21 at 8pm: Meet with your mentor for TP1 and submit the deliverables on Autolab

    Wed Nov-29 at 8pm: Meet with your mentor for TP2 and submit the deliverables on Autolab

    Thu Dec-7 at 4:30pm: Submit TP3 deliverables on Autolab

    Thu Dec-7 to Sat Dec-9: Meet with your mentor for TP3

    Thu Dec-7 at 7:30pm: Term Project showcase!

  3. Policies and Rules

    The term project is different from the other assignments and exams in 15-112. Therefore, it has its own special set of policies and rules. Note that the main course policies still apply, unless they are overruled by the policies described here.

    • Collaboration: This project is solo, in that every student must do their own independent project. However, unlike other solo assignments, you may be richly collaborative in terms of helping each other, including viewing other students' code to help them debug, openly discussing designs and algorithms, etc. Using resources wisely is an important aspect of this term project. However, you still must conceive and understand your entire design of your project, and you must personally write every line of code that you submit for credit.

    • Online Resources: You may use any materials whatsoever, including source code, designs, images, text, sounds, or anything else, from any sources you may discover online. However, you must very clearly cite each such use, so it is very clear what is yours and what is not, and in the latter case where the materials came from. We will grade you only on your original contributions, and we will penalize use of external materials without citation. Note that you must also clearly cite code that comes from the course notes!

    • Prior Work: You may use code that you've written for past assignments, or code that you've written for projects outside of this course, but you must clearly cite this code as having been written for a different purpose. We will only grade you on code developed specifically for the term project.

    • External Module/Technologies: You are allowed to use external modules or physical technologies for your Term Project, but to receive permission to use these modules, you must demonstrate that you understand how they work. You may discuss what a suitable tech demo for your module looks like with your mentor in your TP0 meeting. This demonstration must be done by Sunday November 19th at 8pm, after which your mentor will let you know whether or not you can use the module. Projects that use modules which have not been approved by the mentor will not be accepted.

    • Weekly Meetings: You'll have weekly meetings with your mentor to demonstrate the progress you've made and to receive advice. These meetings will be quick (often only ten minutes), but should greatly help you in making progress in the project. We expect you to treat your mentor with respect by responding promptly to scheduling emails, arriving at meetings on time, and never missing scheduled meetings. If you miss a scheduled meeting, there will be a 5% deduction on the associated deliverable

    • Submission: You will submit each deliverable as a zip file on Autolab. If you don't know how to zip a file, learn how here. Please note that Autolab will not accept submissions larger than 10 MB. If your zip file is larger than this, submit the core part of your project to Autolab, and submit the rest to your mentor via some other means (Google Drive, USB drive, email, etc).

    • Late Policy: We generally do not allow students to submit the deliverables late, and you may not use grace days on the term project deliverables. That having been said, if you have a medical or family emergency, email the professors to see if an extension can be arranged.

  4. Deliverables

    You will have 3 weekly deliverables for this term project, each graded separately. The first two deliverables (TP1 and TP2) will be counted as quizzes on autolab and in your final grade. The last deliverable (TP3) will determine your general Term Project grade, which counts for 25% of your final grade.

    Grading will generally be done in person with your mentor. Each of the deliverables comes with a rubric, but these rubrics are fairly general, as projects vary so widely. In general, we expect a large amount of effort to go into the design, writeup, implementation, and presentation of your project.

    1. TP1 (due Tue Nov-21 at 8pm)

      The TP1 deliverable consists of two main components: a design proposal and preliminary code. You should finish these components before meeting with your mentor, so that you can present them to your mentor in full.

      We recognize that some students may be traveling the week of November 21st for Thanksgiving. If you will be out of town on that Tuesday, you may arrange a meeting with your mentor via video chat instead of in person.

      • Design Proposal [70 pts]

        Your Design Proposal should be submitted as a directory containing several files:

        • Project Proposal [30 pts]
          Include a complete and thorough project proposal (in the file proposal.txt, or .doc, or .pdf), clearly defining the problem you intend to solve, a fairly detailed description of how you intend to solve it, how you will break this problem down into several different tasks, and an algorithmic plan for the trickiest part of the project. Your proposal must also list all modules and technologies you plan to use outside of Tkinter.

        • Competitive Analysis [20 pts]
          Perform a competitive analysis (as we learned in class) on at least two other systems similar to the one you plan to develop in the file competitive_analysis.txt, or .doc, or .pdf. If your idea is so unique that no other systems exist, find at least two systems that share a property with your planned project (for example, if you're developing a platformer game, find two other platformer games). Include at least five features in your feature table. In the summary, describe how the analysis influenced your ideas for the term project.

        • Storyboard [20 pts]
          Generate a storyboard (as we learned in class) that demonstrates how a user would interact with your finished project. Your storyboard should have at least six panels, and at least three of those should demonstrate features within the project. You may scan or take a picture of your storyboard to submit it.

      • Preliminary Code [20 pts]

        In addition to the design proposal, you should also submit code artifacts showing some early work on the project. This does not need to be a working demo; it should just be a real start towards solving the core problems of your project. For most students, 200-400 lines of decent code would indicate a good start.

      • Timesheet [0 pts]

        In addition to the main deliverables, you must also submit time data here. To do this, you should keep track of the time you spend on the project and enter it into the form.

      • TP0 Meeting [10 pts]

        You should have met with your mentor the previous week to discuss your idea. Attending this meeting on time is worth 10 points.

      You can submit all of these files within a single zip file on Autolab, under the TP1 assignment. TP1 will be counted as a quiz in your grades.

    2. TP2 (due Wed Nov-29 at 8pm)

      Your TP2 deliverable consists of one main component: a working demo. You should get this demo working before your mentor meeting, so that you can show off your awesome work.

      • Working Demo [90 pts]

        At this point, you should have a working demo of your project, approximately at what would be considered a C-level final project. The code may be missing features, it may have a less-than-polished user interface, it may have bugs, it may even crash more often than desired, but it has to basically work for some reasonable definition of "work". Your project must clearly show results consistent with at least 10 hours per week of productive effort, with most students investing more than that.

      • Design Modifications [10 pts]

        Many students update their design plans due to unforeseen problems or new ideas. If you change your project design, you must update your design proposal to reflect the changes. Changes should be added to a new section in the proposal titled 'Update 1'. You do not need to update your competitive analysis or storyboard, but you should keep them in your design directory.

      • Timesheet [0 pts]

        Fill out another timesheet to include the hours worked since TP1.

      Again, place all the following in a single zip file which you will submit to Autolab, this time under TP2. TP2 will be counted as a quiz in your grades.

    3. TP3 (due Thu Dec-7 at 4:30pm)

      TP3 is your final term project deliverable, and should be your completed term project. The main deliverables are the project codebase and source files, a demo video, and a design directory. Your project should be complete when you present it to your mentor. Note that the presentation may take place after the Thursday deadline (up to Saturday evening), but you may only present work contained in your Autolab submission.

      • Project Codebase [75 pts]

        The codebase should include all your python files and any other files (images, music files, etc.) required to help your project run. Your project should run robustly, should be algorithmically complex, and should have decent user experience. It may also have a well-designed user interface, depending on the project.

      • Design and Documentation [10 pts]

        Your submission should include the design directory from the previous deliverables, with a new section, 'Update 2', which includes any design modifications made since the previous update. You must also add a new file, readme.txt, which describes what the project is at a high level, and explains how to run the project and how to install any needed libraries (if you can include the library in the submission, that is preferred). A competent programmer should be able to run your project after reading the readme file, so make sure to include all necessary files in your submission!

      • Project Demo [5 pts]

        You will need to demo your project two times: once in your TP3 mentor meeting, and once in a video included in your submission. Your demo should be 1 to 3 minutes long, and should capture the main idea of the project. Do not show every last feature. Instead, show the most important features, the highlights, the parts that are distinctive. You may just use a screen capture utility if you wish, along with a voiceover. Or you may just use a webcam or other video camera (even a decent cell phone camera) and directly video your screen. You do not need expert production value, and in particular you do not have to edit your video (and so you can have pauses, imperfect scene changes, and occasional verbal slips). However, the video should be of decent quality, and should clearly demonstrate your project, such that we can use it as part of our grading process (though we will also run your code). We may also place excerpts from some videos in a student term project gallery on the course website. Also, critically, your video should meet your own standards so that you could reasonably place it in an online portfolio of your academic work, and submit it to a prospective employer as part of your CV. Your video demo may be submitted as a link to YouTube (or some other video hosting service) in a file called demo-video.txt.

      • Style [0 pts]

        Writing your project code with good and consistent code will make your life much easier! In particular, we expect that you will organize your code in a sensible way (and certainly into more than one python file), and that you will have a short comment at the top of each file describing what the file does. We will not directly grade your code for style, but we reserve the right to deduct points for egregious style errors.

      • Timesheet [0 pts]

        Fill out another timesheet to include the hours worked since TP2.

      • Effort [10 pts]

        The term project should take up the majority of your 15-112 time in the last three weeks of the semester. After subtracting 2.6 hours for lecture, this leaves 10 hours a week which you should be spending on the term project. Therefore, we expect that each student will spend at least 30 hours on the whole project. Spending this time and showing real effort and progress in mentor meetings will factor into these ten points.

      Again, place all of your files into a single zip file and submit on Autolab, under TP3. If your whole project (including supplementary files) takes more than 10 MB of space, submit the main parts to Autolab, and submit the rest to your mentor through some other means. TP3 will be graded as the main Term Project, and is worth 25% of your final grade.

      Note that the TP3 meeting is very important, as it is where your mentor will decided what your grade should look like. Your mentor will send an email with sign-ups for time slots. We strongly suggest that you arrive 5 minutes early to your time slot, with your computer prepared to give a demonstration, so that none of your time is wasted. Also, your demonstration should take no more than five minutes, so that your mentor has adequate time to ask you questions. Grades will not be finalized until all the 15-112 staff have met to normalize grades across mentors.