Proposal Template#
This is a template to specify what your project is and the execution plan. You will find it is difficult to plan for things that you are not sure about. Do your best.
Note
You are encouraged to use this plain-text reStructuredText format. Download
this file.
Please do give your project a name that clearly states the subject and is short enough for people to remember.
Additional documents or files may be used. They should be added in the repository.
Basic Information#
Create a GitHub repository to host your project and add the URL here. The GitHub repository has an ‘About’ field, in which you are encouraged to write a simple statement (preferably one sentence) to introduce the project.
Problem to Solve#
Describe the problem or the set of problems you want to solve. Include necessary background information without making it lengthy.
Some points may help you organize the problem description:
The field or industry of the problem.
The physics and/or the mathematics behind the problem.
The algorithm or numerical method that should be applied for solving the problem.
Prospective Users#
Describe the users of your software and how they will use it. It is OK to combine this section with the previous one (Problem to solve).
System Architecture#
Analyze how your system takes input, produces results, provide interface, and performs any other operations. Describe the system’s work flow. You may consider to use a flow chart but it is not required. Specify the constraints assumed in your system. Describe the modularization of the system.
API Description#
Show how your system can be programmed. You are supposed to implement the system using both C++ and Python. Describe how a user writes a script in the system.
Engineering Infrastructure#
Describe how you plan to put together the engineering system:
Automatic build system and how to build your program
Version control (show how you will use it)
Testing framework
Documentation
Some of the above information should be included in the documentation in your software.
You may use continuous integration, but it is not required. If you use it, describe how it works in your code development.
Schedule#
Itemize the work to do and list them in a timeline. Estimate the efforts of each item before the project starts.
The schedule is expected to be adjusted during the development. A schedule to accurately predict everything in the development is impossible and unnecessary. But the initial estimate is important, for the baseline becomes concrete when we adjust the plan.
To start, you can list the to-do items on a weekly basis and assume the development of the project takes 8 weeks:
Planning phase (6 weeks from mm/dd to mm/dd):
Week 1 (mm/dd):
Week 2 (mm/dd):
Week 3 (mm/dd):
Week 4 (mm/dd):
Week 5 (mm/dd):
Week 6 (mm/dd):
Week 7 (mm/dd):
Week 8 (mm/dd):
References#
List the external references for the information provided in the proposal.