Proposal

⚠️
This section describes a project milestone. See the schedule for due dates. Before you can proceed, you must have completed the instructions under initialization.

In this milestone, you will choose a project, and write down the preliminary details of what you intend to build. This should not be an overly technical document; it’s meant to capture requirements and design intent. When completed, you will meet and present this to your TA.

Step 1. Select a topic

Before proceeding, make sure to review the requirements! You have lots of flexibility, but you need to meet those requirements and constraints.

We recommend the following steps:

  • Have a discussion with your team about any personal goals that you might have. For example, if you’re interested in learning about a particular technology e.g., database or user interfaces, this might be a good opportunity to explore that.
  • Brainstorm! Try and identify potential users, and problems that you could solve for them. If you need inspiration, look at existing applications and try and improve on those. This is important: identify the need first, and then second think of how to solve that need.
  • Record all of your ideas. You want to capture everything, and as they say, “there is no bad idea” at this point!
  • Discuss as a team and narrow down your ideas to a single problem/solution that you would like to address.

Step 2. Document your proposal

Create a wiki page in your project, titled Project Proposal. Write a proposal containing the following sections.

1. Title and Description.

You should name your project (even a DRAFT name is acceptable at this stage). Write a brief paragraph explaining what your project will do. Focus on what it does, who this benefits, and why that is useful to them.

Your description should include:

  • A statement on who your users are (e.g., lawyers practicing family law; CS students; elementary students learning algebra).
  • A description of a problem that they have, that you are attempting to solve for them. (e.g., keeping track of billable hours for customers; taking notes in class that can include diagrams and math; help studying).

2. Requirements

You should identify

  • Your target users. Describe the group, or role that might use your software e.g., Computer Science students; Lawyers practising family law; Anyone who wants to organize their calendar; Busy people who like to cook at home.
  • What problem do they have that you would like to address?
  • How are you going to address this problem? You should attempt to address this problem in a unique way.

You should also identify the main features of your application, and describe how they should work from the user’s perspective. The details will be unique to each team, but should be non-trivial features that demonstrate your ability to design and implement complex functionality to address a problem.

Make sure to consider how these requirements will interact with the basic project requirements.

3. Technical Constraints

This should be rolled into your general requirements, but we want be explicit: list your target platform and operating system and any other technical constraints that you anticipate.

4. Project Plan

You should list out the milestones in your project (hint: it’s the project deliverables), and for each one, describe your high-level goals for that milestone.

You should also include a Gantt chart, drawn on your wiki page with Mermaid.js. You do not need to list every requirement (!) but you should indicate high-level objectives for each milestone. At least some of the contents can be taken directly from the deliverable requirements e.g., Demo 1 page.

ℹ️

Example Proposal

Recipe Rolodex

Description
Recipe-Rolodex is meant to help indecisive people choose where to eat out. They open the application, click on the “Pick for me” button and the application will randomly select a restaurant based on location and food allergies of the user and their friends. The application also allows friends to connect to each other and see one another’s allergies and preferences, and supports making decisions for groups of friends.

Requirements
Recipe-Rolodex targets people who like to eat out often, with friends. It will require the following core features:

  1. User profiles, so that we can track each individual person’s preferences, food allergies and so on.
  2. A way for users to form groups to go out. A group should be able to chat together online, and ramdonly pick a restaurant that works for all of their preferences and allergies.
  3. A randomize feature that picks for the group and publishes results to everyone.
  4. A history, so that you can look back and remember where you ate previously.

Stretch goal: track individual dishes, so you can take a picture of what you ate, and rate your individual dish.

Technical Constraints
Recipe-Rolodex will be implemented on Android and iOS as primary targets (since people tend to have phones when they eat-out). It should be usable offline.

Project Plan

Demo 1 Plan
The first sprint it supposed to help us setup the application architecture, builds and basic unit tests. We have a very database intensive project, so we also intend to use Spring 1 to work on our entity model (to produce classes) and our database schema (for the database tables). We will show this for feedback at the same time that we present Demo 1. This will allow us to get further ahead in Demo 2.

Demo 2 Plan
We will implement the basic user interface classes, and have the main screens working. Additionally, since we will have our entity model done in Sprint 1, we can continue this sprint by…

Project Milestones (attached)

  gantt
    title Uber-Tweets Project Plan
    dateFormat YYYY-MM-DD
    section Demo 1
        Setup architecture :a1, 2025-01-01, 2d
        Add unit testing libraries :after a1, 1d
        Write unit tests :after a1, 8d
    section Demo 2
        Prototyping :b1, 2025-01-15, 5d
        Implement screens :after b1, 5d

Add your presentation to the Wiki.

Create a presentation to use in your demo. It should either be a Powerpoint presentation, a PDF, or a Google Slides deck. It should be linked to the README file, so that it’s accessible (see example).

Update the README

Finally, your README file should be updated to include links to your wiki page and presentation. e.g.,

ℹ️

Example README

Uber-Tweets
The Uber-eats app for parakeets!

Team 101-07
We are a small-but-mighty 2 person team.

Our team contract includes details on how we will work together.

Project Documents

Step 3. Present your proposal

Proposals will be presented in-class to your TA (see the schedule for dates). For full marks, you should be prepared with a Google Slides, Powerpoint presentation or PDF that summarizes your (larger) proposal.

You will have 15 minutes to walk through your presentation.

  • Everyone on the team should present some portion of it.
  • It should include the main contents from the written project proposal.
  • The final page should be “Outstanding Questions” if there is anything you wish to ask the TA.
  • You are responsible for writing these down any feedback, and addressing any concerns before your next demo.

After your demo, you should submit your proposal for grading. The only difference between the version that you submit and what you presented in-class should be minor changes from your meeting with your TA. i.e. small changes are not unusual.

Step 4. Submit your final proposal

This proposal is due by 6:00 PM on the listed time and date.

There is no formal submission required for your proposal, since we will grade what is in your GitLab repository. Please make sure that everything is committed and complete by this time.

⚠️
You should NOT be making drastic changes between your demo and the submission time. Insignificant changes are acceptable e.g., a spelling mistake in your presentation but you should not be drastically changing what was shown during the demo.