How can we define the core functionality of a software system in a clear and user friendly way.
While they are a great tool to have a common overview of the system to be developed, one should not go and obtain use cases in every single scenario that could happen, even the extremely unlikely ones, as that costs time and money. They define the scope of what the software should do.
Use cases are obtain during the requirement gathering process and planning phase.
A great tool as well are user stories, which helps us understand in what way the target user will use it (duh) and to achieve what objective. There may be several types of users, each with different use cases.
happy user because the app works correctly