#summary A Place to Capture Information about how the Proposal Review UI Should Work
#labels Importance-Details,Phase-Design,Contents-Draft

= Discussion Related to Proposal Review User Interface =

There are many open issues in the tracker related to the review of proposals. For now, the proposal submission UI is a separate topic since what is in place now works well enough. A separate wiki page can be created by those more keenly interested in the proposal submission process.

  * Issue 82 Developing student applications - finding new information

  * Issue 420 Allow editing of the review comments on student applications   

  * Issue 449 Indent the comments and number them. 	 

  * Issue 463 Scoring and Ranking Functions Require Improvement

  * Issue 497 App Summary - Date of Update vs Date of Last Comment 

  * Issue 517 Feature Request: Extended Proposal Management

  * Issue 524 View with for each mentor how they ranked all proposals (color coded)


[http://code.google.com/p/soc/issues/list?can=1&q=ProposalReview&colspec=ID+Summary&cells=tiles All issues linked to this page]

== Finding What has Changed ==
  * A page that shows what has changed.
  * Diffs/History for project description text.

== Scoring Proposals ==
  * Related Issue 463

  * People seem to have many different opinions about implementing a scoring system. We need to decide what the scoring system shall be for once and for all and document it extensively.  Perhaps what we have now is sufficient provided it is better documented/better help text exists.

  * [http://groups.google.com/group/google-summer-of-code-mentors-list/browse_thread/thread/d911807ca4e249b9 Discussion of scoring on the GSoC mentor list]

Perhaps we should just support a single scoring system and tell folks that if they like it not they need simply to accommodate for it.

In that case, LH proposes one mentor - one vote with the organization administrator able to override via ranking. 

This does not, however, solve the problem of what to do about a proposal reviewed by 3 mentors, all of whom ranked it 4, being less well scored than a proposal reviewed by 5 mentors, all of whom ranked it 3.


    