CMU 15-112: Fundamentals of Programming and Computer Science
Class Notes: Term Project Assignment
Due: Fri 26-Jun at 4:30pm EDT (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
    1. 21-Jun: Checkin 1
    2. 22-Jun: TP1
    3. 23-Jun: Checkin 2
    4. 24-Jun: TP2
    5. 25-Jun: Checkin 3
    6. 26-Jun: TP3
    7. 26-Jun: TP Showcase
  3. Policies and Rules
  4. TA Partner Project
  5. Deliverables
    1. TP1
    2. TP2
    3. TP3

  1. Term Project Description

    Your task is to design and implement a program of your choosing. 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.

    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. You are encouraged to discuss your project with your Mentor TA during the last couple days of the semester, so you know where you stand and what additional work may be required to improve your grade. Your Mentor TA will never grade your project. They will be present while you are being graded by a rotating grader TA and advocate for your project.

    You have an extended period to finish this assignment, with no other required assignments during the last week. You are expected to invest roughly 25-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.

    The term project is very open-ended, but there are a few restrictions:

    • You must use Python. If you want to use a different programming language (including Go and JavaScript), you will need to obtain special permission from the course instructor.
    • You should produce an interactive Python application. If you want to create a phone app or webapp, or if you want to create a non-interactive application, you will need to obtain permission from the course instructor.

  2. Schedule

    Many events happen during Term Project Season! This is your guide to all of them.

    Week 5

    • Sun 21-Jun 2pm-6pm and 7pm-9pm EDT: HACKTP! Come to get a solid start on your Term Project and attend some mini-lectures TAs will be holding on advanced topics.

    • Sun 21-Jun: At the end of HackTP, meet with your mentor for Checkin 1. In this meeting you will discuss the progress you made during HackTP and plan out what to prioritize for TP1. Make sure you've solidified a project idea with your mentor before HackTP!

    Week 6

    • Mon 22-Jun: Meet with your mentor and grader for your TP1 checkin and submit the TP1 deliverable on Autolab. By TP1 you are expected to have finalized the design plan for your project, and you should have made a decent start on the code (200-400 lines).

    • Tue 23-Jun: Meet with your mentor for your checkin 2 meeting.

    • Wed 24-Jun: Meet with your mentor and grader for your TP2 checkin and submit the TP2 deliverable on Autolab. By TP2 you should be at a Minimal Viable Project (MVP) stage, with the majority of the project's core code implemented.

    • Thu 25-Jun: Meet with your mentor for your checkin 3 checkin meeting.

    • Fri 26-Jun 4:30pm EDT: Submit the TP3 deliverable on Autolab. TP3 should be your completed final project, including a video demo and all design files related to the project.

    • Fri 26-Jun 4:30PM-5:15PM EDT: Keep an eye on your email inbox; sometime in this period, we'll email a select few students and ask them to present at the Term Project Showcase.

    • Fri 26-Jun 5:30pm EDT: Attend the Term Project Showcase and watch demos of amazing projects by your classmates. Invite friends and family to the showcase!

    • Fri 26-Jun 6:30PM-11:00PM EDT: Meet with your mentor and grader for your TP3 live demo. You may only present work that was completed before the TP3 deliverable deadline. Note that the TP3 meeting is very important, as it is where your mentor and grader will decided what your grade should look like. Your mentor will send an email with sign-ups for time slots. Your demonstration should take no more than five minutes so that your mentor has adequate time to ask you questions.

  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. All of your cited code must exist in a separate file, and say that it is cited code at the top. 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! Non-cited external code will receive a -15 penalty on TP1, a -25 penalty on TP2, and will be investigated as potential cheating cases in TP3.

    • 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. Additionally, all term project code must be completed within the current semester.

    • Mentor Meetings: You'll have meetings every day with your mentor to demonstrate the progress you've made and to receive advice. These meetings will be quick (often only fifteen 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, or are significantly late to that meeting, there will be a 5pt deduction on the associated deliverable; if you completely skip a meeting with your mentor, there will be a 25pt deduction on the 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, email, etc).

    • Late Policy: We generally do not allow students to submit the deliverables late. That having been said, if you have a medical or family emergency, email the course instructor to see if an extension can be arranged.

  4. TA Partner Project
    If you think you would benefit from more extensive TA help on your project, you may opt in to a TA Partner Project using this link by Saturday 20-Jun at 5:00pm EDT. In this verion of the term project, you will receive daily 1-hour meetings with your TA. Like a standard TP Mentor, they will help you plan and prioritize features. Unlike a standart TP Mentor, they will also restructure and rewrite pieces of your code with you. If you opt in to this version of the Term Project your grade will be capped at a 75. That means the maximum grade you can receive is a 75, but you can still score lower.

  5. Deliverables

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

    Grading will generally be done in person with your mentor and grader. 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 Mon 22-Jun at 8:00pm EDT)

      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. You can submit all the required files within a single zip file on Autolab, under the TP1 assignment. If your file is larger than 10MB, read here for info on how to submit. TP1 will be counted as a test in your grades.

      • Design Proposal [25 pts]

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

        • Project Proposal [15 pts]
          Write up a proposal file (in the file proposal.txt, or .doc, or .pdf) which should include the following components:

          • Project Description [2.5 pts]: The name of the term project and a short description of what it will be.

          • Competitive Analysis [2.5 pts]: A 1-2 paragraph analysis of similar projects you've seen online, and how your project will be similar or different to those.

          • Structural Plan [2.5 pts]: A structural plan for how the finalized project will be organized in different functions, files and/or objects.

          • Algorithmic Plan [2.5 pts]: A detailed algorithmic plan for how you will approach the trickiest part of the project. This plan should follow the format in our "large project design" notes.

          • Timeline Plan [2.5 pts]: A timeline for when you intend to complete the major features of the project.

          • Version Control Plan [2.5 pts]: A short description and image demonstrating how you are using version control to back up your code. You must back up your code somehow!!!

        • Storyboard [10 pts]
          Generate a storyboard 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 and include it in the directory as the file storyboard.png (other acceptable filetypes include .gif, .jpg, and .pdf).

      • Preliminary Code [75 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.

      • Checkin 1 Meeting [0 pts]

        You should have met with your mentor on Sunday to discuss your progress. If you miss this meeting, you will be penalized 25 points.

      • TP1 Meeting [0 pts]

        You'll meet with your mentor and grader to check in and demonstrate what you've accomplished so far. If you miss this meeting, you will be penalized 25 points.

    2. TP2 (due Wed 24-Jun at 8:00pm EDT)

      Your TP2 deliverable consists of two components: a working demo and updated design docs. You should submit all the files in a single zip file to Autolab, this time under TP2. If your file is larger than 10MB, read here for info on how to submit. TP2 will be counted as a test in your grades.

      • Working Demo [100 pts]

        At this point, you should have a working demo of your project that meets your project's version of MVP (Minimal Viable Project). This generally requires that the core features of the project should almost all be implemented such that they more or less work. 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".

      • Checkin 2 Meeting [0 pts]

        You should meet with your mentor on Tuesday to discuss your progress. If you miss this meeting, you will be penalized 25 points.

      • TP2 Meeting [0 pts]

        You'll meet with your mentor and grader to check in and demonstrate what you've accomplished so far. If you miss this meeting, you will be penalized 25 points.

      • Updated Design Docs [0 pts]

        Many students update their design plans due to unforeseen problems or new ideas. You must add a new section to your design proposal, 'TP2 Update'; in this section, you should list any design changes you have made. If you made no changes, simply say so in this section. You do not need to update your storyboard, but you should keep it in your design directory. If you do not add this update section, you will be penalized 5 points.

    3. TP3 (due Fri 26-Jun at 4:30pm EDT)

      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 your updated design docs. Place all of your files into a single zip file and submit on Autolab, under TP3. If your file is larger than 10MB, read here for info on how to submit. TP3 will be graded as the main Term Project, and is worth 20% of your final grade.

      • Project Codebase [90 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 [5 pts]

        Your submission should include the design directory from the previous deliverables. The proposal should have a new section, 'TP3 Update', which includes any design modifications made since the previous update (or says that no changes were made if no changes were made). You must also add a new file, readme.txt, which 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]

        There are two parts to the project demo: the video demo and the live demo.

        • Video Demo [2.5 pts]: This should be a 1-3 minute long video that captures the main idea of the project. It should show the most important and coolest features of the project, with narration to explain how it works. This demo should not provide a full walkthrough of the whole project, and does not need to cover every single feature; think of it as more of a trailer for the project as a whole. Your video demo should be uploaded to YouTube (or some other video hosting service), and your submission on Autolab should include a file called demo-video.txt that contains a link to the uploaded video.

          The quality of the video and audio does not need to meet any particular standard (as long as it meets YOUR standards such that you'd be happy to include it in your own portfolio). Feel free to use a screen capture program (Quicktime, Jing, and Screencast-o-Matic are all good and free options) or a video camera to record. Parts of some demo videos may be selected to appear in the TP Lightning Round video.

        • Live Demo [2.5 pts]: In your TP3 meeting, you will need to provide a live demo to your mentor and grader. This demo can be up to 5 minutes long and should cover all the core components of the project, especially anything your mentor might not notice when they try the code themselves. This is your chance to convince your grader that you deserve a great grade!

      • Checkin 3 Meeting [0 pts]

        You'll meet with your mentor to check in and demonstrate what you've accomplished so far. If you miss this meeting, you will be penalized 2.5 points.

      • Style [0 pts]

        Writing your term project code with good and consistent style 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.