A definition of User Stories
A user story is a software system requirement formulated as one or more sentences in the everyday or business language of the user. User stories are used with Agile software development methodologies for the specification of requirements (together with acceptance tests). Each user story is limited, so it fits on a small paper note card—usually a 3×5 inches card—to ensure that it does not grow too large. The user stories should be written by the customers for a software project and are their main instrument to influence the development of the software. - Wikipedia
In Succeeding with Agile, Cohn defines User Stories as such:
A user story is a short, simple description of a feature told from the perspective of the person who desires the new capability, usually a user or customer of the system. (p238)
How to write a User Story
Here's a great blog from Cohn on his primary User Story template and here's the template that I use care of Cohn's suggestion:
As a <type of user>, I want <some goal> so that <some reason>.
In this template, we select and cater to three important pieces which are user role (type of user), the feature (some goal), and the value statement (some reason).
The user role helps ground the User Story by giving it relevance. The feature is obviously important because it is what we're building and, finally, the value statement justifies why we're bothering with the development in the first place.
Are there alternatives to using the As/a template or User Stories in general?
There's never one single way to solve a problem. Personally, I enjoy the As/a template because of its simplicity. Regardless, here are some other techniques that I've run across. Research as you like...
Feature-Driven Development (FDD) - Features
A feature is a small, client-valued function expressed in the form <action><result><object>. As the name implies, features are an important aspect of Feature-Driven Development (FDD) (Palmer and Felsing 2002).
Unified Modeling Language (UML) - Use Case Modeling
A use case in software engineering and systems engineering is a description of a system’s behavior as it responds to a request that originates from outside of that system. In other words, a use case describes "who" can do "what" with the system in question. The use case technique is used to capture a system's behavioral requirements by detailing scenario-driven threads through the functional requirements. - Wikipedia