Building Software
User Story
A user story is a way of capturing requirements in a format that is useful for engineers and customers. These are short documents that capture who a feature is for, and how long it will take to build.
- Short, simple, independent stories
- Write from the user perspective
- Make the value/benefit of the story clear
- Describe one piece of functionality
- Write stories as a team.
Organize User Stories in groups of
- "must have"
- "nice to have"
- "out of scope"
Write in a role-goal-benefit format
As a <type of user>, I want <goal/object> so that <benefit/value>
Planning fallacy is a phenomenon in which predictions about how much time will be needed to complete a future task display an optimism bias. Avoid this by:
- Getting estimates from multiple people
- Estimate "effort required" in terms of "ideal days" or "story points" (estimate the effort required as a combination of the complexity of work and the risk and uncertainty involved in it)
- Use relative estimates.
A "unit" for estimating the size of a product backlog should be based on the time it takes to complete an item if it were the only work being performed.
- Estimates larger than 13 idea days cannot fit into an iteration. Break that story apart.
- If the total estimate of all user stories in the "must have" category is > 5 iterations, make the project smaller.
A Minimum Viable Product (MVP) should have enoguh value that customers want to start using it.
Project Backlog
A Product Backlog is the current list of user stories for the project.
Before starting an iteration, select a subset of user stories from the project backlog that are planned to be delivered during the iteration. Divide each user story into tasks.
A task lifecycle: backlog > build > test > done
Each user story will be a "card" in a board that will have tasks. Each task will be linked to an issue in the repository.
Have a To Do column that is filled with high-level tasks that you will work on for future iterations.
Learn more about managing a project board
Linked from Object-Oriented Software Engineering