A good user story uses the INVEST model. INVEST stands for Independent, Negotiable, Valuable, Estimatable, Small, and Testable.
Good stories are easiest to work with if they are independent with reduced dependencies and are easier to plan. i.e, we’d like them to not overlap in concept, and we’d like to be able to schedule and implement them in any order.
A good user story is negotiable and details are added by collaboration. It is not an explicit contract for features; rather, details will be co-created by the customer and programmer during development. A good story captures the essence, not the details of the implementation.
A good user story provides value to the end customer. A story needs to be valuable. We don’t care about the value to just anybody; it needs to be valuable to the customer.
A good story can be estimated. Too big or too vague user stories are not estimable. There must be enough information and understanding from the team to estimate the story so that an expectation of complexity, effort, risk, and delivery can be made to the product owner and stakeholders.
A good user story should be small. They can be done in one Sprint by the scrum team.
A good story is testable with good Acceptance Criteria.