{"componentChunkName":"component---src-templates-generic-template-js","path":"/project/proposal","webpackCompilationHash":"041090671d318979d692","result":{"data":{"markdownRemark":{"htmlAst":{"type":"root","children":[{"type":"element","tagName":"p","properties":{},"children":[{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"Proposal stage is complete. Here are the "},{"type":"element","tagName":"a","properties":{"href":"/~candrews/classes/cs312-f19/4db174027a582a7846954bf7bb65eb29/proposals_2019.pdf"},"children":[{"type":"text","value":"submitted proposals"}]},{"type":"text","value":"."}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"the-project"},"children":[{"type":"element","tagName":"a","properties":{"href":"#the-project","ariaLabel":"the project permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"The Project"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"We will spend the second half of the semester working on large-scale web applications in teams of 6-7 students (4 projects total). The primary requirements for the project are technical (see the list below). There a relatively few constraints on the goal/content/purpose of the application. Think broadly!"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Project technical requirements:"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Your project should have non-trivial front-end and back-end functionality."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"The project should use React for its front end."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"The back end will be a Node.js-based server."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Your application must store some data in a database."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"The front end should follow the SPA approach we have been learning about in class (although your application need not be truly \"single\" page, you can link several SPA-ish pages together)."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The scope is always hard to estimate. However, with 6-7 students over 6 weeks,\nyour team's total capacity should be over 300 person-hours. Scope your\nproject with that capacity in mind. You can build a substantial application in\n300+ hours! "}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h2","properties":{"id":"the-proposal"},"children":[{"type":"element","tagName":"a","properties":{"href":"#the-proposal","ariaLabel":"the proposal permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"The Proposal"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"At this stage, I am looking for a collection of proposals. Consider this\noptional assignment a Request-for-Proposals (RFP). You are encouraged, but not\nrequired, to submit a proposal. I will vet the proposals for suitability and\nscope before sending them out to the class."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"If you wish to propose a project, please prepare short written proposal,\napproximately one page in length (no less than 3/4 page and no more than 2\npages). You proposal should contain the following information. "},{"type":"element","tagName":"em","properties":{},"children":[{"type":"text","value":"For\nconsideration, submit your proposal via e-mail\n(due 5p on 2019-10-08)."}]}]},{"type":"text","value":"\n"},{"type":"element","tagName":"ol","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"The title of the project"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"The names of the proposer(s) (can be multiple people)"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"The target users or other stakeholders"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The main functionality of the application. Specifically, you should describe the major \"epics\", i.e. the big coarse-grained user stories."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"This component should make up the bulk of your proposal."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"The role the back end will play in supporting the application"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"What, if any, external resources, such as APIs, do you plan to incorporate"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"Incorporating an external API is not discouraged, as long as it is\n\"self-serve\". For example, you can automatically obtain a Google Maps API\nkey and the API has a free quota that is more than sufficient for a class\nproject. In contrast, any API that requires \"manual\" approval by the\nprovider will likely be a problem. You only have 6 weeks to complete the\nproject, and so waiting 3 weeks for API approval is not practical."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h3","properties":{"id":"faq"},"children":[{"type":"element","tagName":"a","properties":{"href":"#faq","ariaLabel":"faq permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"FAQ"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"id":"is-the-project-bound-by-the-proposal"},"children":[{"type":"element","tagName":"a","properties":{"href":"#is-the-project-bound-by-the-proposal","ariaLabel":"is the project bound by the proposal permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"Is the project \"bound\" by the proposal?"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"The proposal is not a contract. We expect the projects to evolve (often\nsubstantially). That said, your proposal needs to be specific enough (and\n\"thought through\" enough) that you and we can estimate the scope (and your\nclassmates have a good idea of that they would be signing up to do). A great\nproposal will provide a clear starting point for your first development\niteration (\"sprint\")."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"id":"what-kinds-of-projects-are-not-a-good-fit"},"children":[{"type":"element","tagName":"a","properties":{"href":"#what-kinds-of-projects-are-not-a-good-fit","ariaLabel":"what kinds of projects are not a good fit permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"What kinds of projects are not a good fit?"}]},{"type":"text","value":"\n"},{"type":"comment","value":" \nAdapted from http://cs169.saas-class.org/faq/external-customer\n "},{"type":"text","value":"\n"},{"type":"element","tagName":"ul","properties":{},"children":[{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"A mostly \"static\" website, or a site that could be managed with an off-the-shelf Content Management System (CMS), e.g. WordPress or Drupal."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Native mobile applications."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Applications that rely on commercial frameworks or APIs, e.g. Salesforce."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Applications that handle sensitive data (e.g. health data protected by HIPAA or FERPA-protected student data)."}]},{"type":"text","value":"\n"},{"type":"element","tagName":"li","properties":{},"children":[{"type":"text","value":"Applications you plan on turning into a company in the future. The ownership of the code (and or IP) could be tricky."}]},{"type":"text","value":"\n"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"h4","properties":{"id":"what-kind-of-projects-have-been-successful-in-the-past"},"children":[{"type":"element","tagName":"a","properties":{"href":"#what-kind-of-projects-have-been-successful-in-the-past","ariaLabel":"what kind of projects have been successful in the past permalink","className":["anchor"]},"children":[{"type":"element","tagName":"svg","properties":{"ariaHidden":"true","focusable":"false","height":"16","version":"1.1","viewBox":"0 0 16 16","width":"16"},"children":[{"type":"element","tagName":"path","properties":{"fillRule":"evenodd","d":"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z"},"children":[]}]}]},{"type":"text","value":"What kind of projects have been successful in the past?"}]},{"type":"text","value":"\n"},{"type":"element","tagName":"p","properties":{},"children":[{"type":"text","value":"There is no one phenotype for a successful project, your teamwork and development process is more important to the success of your project than the topic. React is most useful in highly interactive applications (think Google Maps or Mail) and so projects with more interactive UIs will take better advantage of its capabilities."}]}],"data":{"quirksMode":false}},"frontmatter":{"path":"/project/proposal","title":"CS 312 - Project Proposal Guidelines","name":"Proposal"},"parent":{"__typename":"File","id":"b3be870c-e452-5f9e-9074-bc0bae0b6b6c","name":"proposal","modifiedTime":"Oct 10 2019 20:49"}}},"pageContext":{"isCreatedByStatefulCreatePages":false}}}