Final Project

Ferocious Final Projects

Due: May 12, 23:59 PM

Assignment Description

In a team of three or four students, you will propose and produce a final project worth a total of 220 points. As a team, you have considerable freedom to choose a project of interest to you – while we have some suggested projects through the Project Goals links, you are strongly encouraged to propose your own. Note: with the exception of the final deadline, the dates listed here are subject to change.

Team Formation (March 15th – March 26th)

This year teams will be formed using the Comprehensive Assessment for Team-Member Effectiveness (CATME) service. In order to be placed on any team for the final project, you are required to fill out the Final Project Team Survey. For students wishing to form their own groups, the last question of the survey will allow you to submit a unique identifier for your team. We encourage you to use the following link to create a “unique” identifier for your group: Get Unique ID. Note that your team ID cannot be longer than 20 characters due to CATME constraints.

In order to be placed on the correct pre-made team, each member of your team must include this unique identifier. Be sure to type or copy it correctly. Students without a valid identifier (or students who do not fill out this optional survey question) will be randomly assigned and are not guaranteed a position in the group of their choice.

Team Contract (Due April 9th)

As a team, you must submit a 1-2 page document as a MD file which formalizes your team’s views on both core logistical issues as well as common pitfalls you may encounter over the course of your project. Once signed by each member of your team, it should be considered a binding agreement for all parties. Breaches of this contract can and should be brought up internally and – if not resolved – brought to the attention of course staff. Accordingly, the document should – at minimum – include the following major Communication and Collaboration issues.

Communication

Determining how to communicate with your teammates as well as how often you should be communicating is key to a successful remote project. Discuss with your team and draft a statement detailing the following:

  1. Team Meetings When and how often often will your team meet? How long should each meeting last? What software or tool will you use to host these meetings? Will someone take notes (record minutes)?

  2. Assistance How will your teammates be able to contact you if they need your help or opinion on a task? How quickly should you be expected to respond?

  3. Respect An effective team needs to have an environment which encourages open expression of ideas. How will you ensure that every member has an opportunity to speak and, more importantly, that every member will actively listen and engage with the thoughts of others?

Collaboration

The final project tasks you with finding a fair distribution of labor where each student has some role in the development of each deliverable. However the details of this distribution are up to you. Discuss with your team and draft a statement detailing the following:

  1. Work Distribution How will you assign workload for this project? How will you address unexpected complications or unforeseen work? You are encouraged to identify the strengths and desires of each team member when distributing work. You do not need to all work equally on a particular deliverable – it is the overall work that should be largely equal.

  2. Time Commitment How many hours of work per week is expected of each group member? Are there prior time commitments that need to be accounted for? How will you address new conflicts or commitments when they do inevitably occur?

  3. Conflict Resolution How will the team resolve situations where there is a disagreement between members? Situations where one or more members have not accomplished their tasks? Situations where one or more members are habitually late? Are there other hypothetical situations that you as an individual or as a team want to discuss ahead of time? When issues occur, you are strongly encouraged to inform course staff, but only after first trying to resolve the issue as a team in a respectful manner.

To receive credit for your team contract, each individual must electronically sign the document by making a single git commit that modifies the file to include their name and netid. This will both demonstrate that you as an individual have agreed to the contract and ensures that you experience early in the project the joys of multiple users editing the same document. Be sure to `git pull’ so you don’t overwrite your teammates signature!

An example contract can be found HERE. Note this is a PDF for convenience of distribution – as you must individually sign your contract through a git commit, you cannot have a PDF for your own contract.

Final Project Proposal (Due April 9th)

Even if you choose to use an example project goal, as a team you are responsible for submitting a project proposal of no more than two pages that contains the following information:

  1. Leading Question Your final project should have a clear conclusion or target goal – given a dataset and a code base that implements some graph algorithms, what can you learn from the dataset? Are you hoping to solve a specific problem? Are you hoping to produce a general search tool? Make sure that your entire team is on the same page for what a ‘successful’ project will look like. Be sure that your motivating question is solvable or your proposed final deliverable is reasonable as you will be expected to accomplish it.

  2. Dataset Acquisition and Processing Your final project must use at least one publicly accessible dataset and your proposal must clearly describe what dataset you have chosen to use. As part of this description, you must state how you will download, store, and process your data. This includes succinctly describing the data format and clearly identifying how said data will be used in your proposed graph data structures. Be advised that real world data is often messy and your proposed datasets may have errors or missing entries. Your proposal should also briefly describe how your group will handle these potential errors.

  3. Graph Algorithms Your final project must implement at least two graph data algorithms as well as a graph traversal from the list of example goals or you must propose an algorithm or set of graph algorithms that represent an equivalent amount of coding development. Accordingly, your proposal should clearly state what algorithms you will complete by the projects end. When describing your choices, be sure to include the following: What are the inputs you expect each method to take in? What output are you expecting for each method? If there are multiple ways to implement an algorithm, what is your target big O or efficiency benchmark? For the more complex algorithms, be sure to include as part of the input any additional information you might need. For example, A* search requires a heuristic. If you choose to do A*, what are some possible heuristics you might use?

  4. Timeline As a team, identify a list of tasks such as data acquisition, data processing, completion of each individual algorithm, production of final deliverables, etc… and write a proposed timeline for the completion of these tasks. You are not required to adhere strictly to this timeline but it should represent a reasonable set of benchmarks to strive for. For example, stating that you will finish all graph algorithms over the span of a single week is not reasonable. You will be expected to accomplish at least some of these tasks by the mid-project checkin.

Mid-Project Checkin (April 19th – April 23)

A few weeks into the final project, you are required to meet with your project mentor for a check-in meeting. You do not need to prepare a presentation but should come prepared to summarize your progress as well as have a frank discussion about any issues or concerns you have encountered as a team or as an individual team member. The goal here is to ensure that forward progress is being made and to address any issues that are impeding progress while there is still time to correct and recover. To that end, you should be up front and honest about your current progress.

While the majority of points for the checkin meeting is awarded for attending as a team, for full credit you must have also made some reasonable progress on the assignment. This is to encourage you to start working on the final project long before the final weeks.

Final Project Deliverables (Due May 12th)

There are three main deliverables for this final project. As a team, you are expected to distribute work on each deliverables fairly. This means that each student should be responsible for some part of each of the following:

  1. A functional code-base. Your code must be written in C++ and should be compilable and runnable on the EWS machines (or a VM equivalent). It will be tested for reproducibility of your original results and it’s capacity to run on datasets of our choosing that exactly match your proposed formatting. In addition to the code itself, you must include a human-readable README which describes: (1) The location of all major code, data, and results. (2) Full instructions on how to build and run your executable, including how to define the input data and output location for each method. (3) Full instructions how to build and run your test suite, including a general description on what tests you have created. It is in your best interest to make the instructions (and the running of your executables and tests) as simple and straightforward as possible.

  2. A written report of your project. In addition to your code, your Github repository must contain several files stored as a MD file.

    • GOALS – A two-page proposal which includes: (1) the dataset you are using, with details including source location, format, and how it will be processed. (2) the specific algorithms you have chosen to implement, including their input and output, (3) what final deliverable you will complete to prove your methods have worked and (4) a timeline to accomplish these goals.

    • DEVELOPMENT – A document with exactly one paragraph per week, describing what was accomplished or attempted in that week. For full credit, your team must add a paragraph to this document every week (starting the week project goals are confirmed). You are strongly encouraged to as a git commit.

    • RESULTS – A one- to two-page final report describing the final deliverables of your project, including any discoveries made. Your specific results depends on your proposed GOALS but should contain at minimum a complete run of all of your coded algorithms and proof that they are working as intended.

  3. A final presentation. In addition to your project write-up, you should submit a short video (10 minutes or less) describing your project. Your presentation should include slides or other visual aids and include the following content:

    • Your Goals (Suggested time: 1-2 minutes) The presentation should begin with a summary of your proposed goals and a short statement about what you successfully accomplished and, if necessary, what you were ultimately unable to complete.

      Tip: Think of this as ‘setting the stage’ for your presentation, letting the viewer know what you will be discussing for the rest of the talk.

    • Your Development (Suggested time: 2-3 minutes) The presentation should include a high level overview of the work you put into the presentation. This is not meant to be a line by line recounting of your code but a highlight reel of the various design decisions you made and the challenges you encountered – and hopefully overcame – while working on the project.

      If you were unable to complete one of your goals, this is the best opportunity to explain what you did that didn’t work out, how you tried to address the problem, and what you might do in the future if you were tasked to do this or a similar project again.

      Tip: If you are struggling to identify content here, ask yourself questions like: “How did we get the data we wanted?”, “How did we choose our implementation strategy for an algorithm?”, “How did we ultimately test our code to ensure that it is working?”

    • Your Conclusions (Suggested time: 3-5 minutes) The presentation should end by answering the ‘leading question’ you were hoping to solve. This may include details such as the final or full-scale input dataset you used and the output of each of your algorithms but ambitious teams should focus on how these results led you to discover something interesting involving your real-world dataset. For example, a traversal algorithm on OpenFlights data may be used to identify the shortest path between two airports that your team would like to visit.

      In addition to quantitative results, your conclusions should also end with some individual thoughts you had about the project. What did you learn, what did you like or didn’t like, and what would you explore or implement next if given more time?

    To submit your final project video, you may either include it on Github or include a direct link to the video on your team Github. Videos can be hosted through Zoom cloud recordings, Youtube, Google drive, etc…