# 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 (on Google Code) Developing student applications - finding new information

  * Issue 420 (on Google Code) Allow editing of the review comments on student applications

  * Issue 449 (on Google Code) Indent the comments and number them.

  * Issue 463 (on Google Code) Scoring and Ranking Functions Require Improvement

  * Issue 497 (on Google Code) App Summary - Date of Update vs Date of Last Comment

  * Issue 517 (on Google Code) Feature Request: Extended Proposal Management

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


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

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

## Scoring Proposals
  * Related Issue 463 (on Google Code)

  * 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.

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

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.


