Proposal
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:
- User profiles, so that we can track each individual person’s preferences, food allergies and so on.
- 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.
- A randomize feature that picks for the group and publishes results to everyone.
- 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.
- Jeff Avery jeffery.avery@uwaterloo.ca
- Caroline Kierstead ctkierst@uwaterloo.ca
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.