Start with high level use cases and drill down to detailed use cases.
Create them iteratively and incrementally
Use a standard template across the project
Think about the actor's tasks
Make sure they fully describe the users activities
Keep detail that should be in Activity or Sequence diagrams out
Document the alternative flows
Avoid analysis paralysis. Keep them simple and know when to stop.
Leave out design elements e.g. UI or technical design. Keep them focused on behaviour of the intended system.
Understand that the difference between traditional functional requirements and use case scenarios is that previously the focus was on describing what the system will do,use cases describe user actions and the system's responses.
Be explicit about the names of Actors and boundary objects.
Pre- and post-conditions should be used only if they are absolutely necessary
Actors don't need to be human,they can be external systems.
A list of Actors can help to find the Use Cases by working out what they will do.
Don?t forget non-functional requirements such as system performance.
Alistair Cockburn's process for creating Use Cases:
Name the system scope and boundaries
Brainstorm and list the actors
Brainstorm and exhaustively list user goals for the system
Capture the outmost summary use cases to see 'who really cares',check for an 'outmost' use case for each primary actor
Reconsider and revise summary use cases. Add,subtract or merge goals
Select one use case to expand
Capture stakeholder interests,preconditions and guarantees
Write the main success scenario
Brainstorm and exhaustively list the extension conditions
Write he extension handling steps
Extract complex flows to sub use cases - merge trivial sub use cases
Iterate and adjust



