To contribute a [User Story](http://code.google.com/p/soc/issues/list?can=2&q=type:Story) to the Melange effort, please send an email to the `melange-soc`
[discussion mailing list](MailingListsGuidelines#General_discussion_list.md).

## Summary

In the email subject line, please include:

**Subject:** _User Story: some brief description of the user story_

This subject (minus the _User Story:_ prefix, of course) will become the User Story issue summary in the [Melange issue tracker](http://code.google.com/p/soc/issues/list) when the User Story is accepted.  Discussions of a new User Story on the mailing list are quite welcome and are encouraged.  Once the User Story makes it to the issue tracker, the comment system can be used for further discussion.

## Description

A user story should be a description of a single activity in the web application from the point of view of the user.  The most important characteristic of a User Story is that is **short and to the point**.  The second most important characteristic is that it represents a **single task** that can be implemented.

During the discussion of a new User Story on the mailing list, the discussion could lead to the creation of new, separate User Stories, in order to keep the scope of the User Story from getting out of hand.

## An example

The [very first issue](http://code.google.com/p/soc/issues/detail?id=1) in the [Melange issue tracker](http://code.google.com/p/soc/issues/list) is a very nice example of a User Story:

```
Summary: Claiming a Task

A student may claim a task as long as the following apply:

1. The task has a status of "Open"

2. The student does not have any other claimed tasks currently in progress or pending review.

3. The task was not suggested by the student.

4. The student meets the eligibility requirements of the program.
```