What is Agile?
Agile is a set of principles for software development under which requirements and solutions evolve through the collaborative effort of self-organizing, cross-functional teams.
The Agile Manifesto, published in 2001, describes a set of values and principles intended to guide software development. The manifesto values:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
This does not mean that the items on the right are unimportant — Agile recognizes that there is value in them. But it emphasizes the items on the left more.
Agile vs. Waterfall
Before Agile, most software development used a waterfall model: a sequential approach where each phase (requirements, design, implementation, testing, deployment) is completed before the next begins. While predictable, waterfall has several drawbacks:
- Requirements are locked in early, when the team knows the least about the problem.
- Working software is only delivered at the end of the project.
- It is difficult to accommodate changes once a phase is complete.
- Testing happens late, when fixing bugs is most expensive.
Agile addresses these issues by breaking development into short cycles called sprints or iterations, delivering working software at the end of each cycle.
Key Agile Concepts
User Stories
A user story is a short, simple description of a feature told from the perspective of the person who desires the new capability:
User Story Format
As a [type of user], I want [some goal] so that [some reason].
User stories should be small enough to be completed in a single sprint. They help keep the team focused on user value rather than technical implementation details. Each user story should be:
- Independent: Can be developed and delivered independently from other stories.
- Negotiable: Details can be changed and discussed between the team and the customer.
- Valuable: Delivers value to the user or customer.
- Estimable: The team can estimate the effort required to implement it.
- Small: Can be completed within a single sprint.
- Testable: The team can write tests to verify that the story has been implemented correctly.
Sprints
A sprint is a time-boxed period (typically 1–4 weeks) during which the team commits to completing a set of user stories. At the end of each sprint, the team delivers working software that can be reviewed and used.
Key sprint ceremonies:
- Sprint Planning: The team selects user stories from the product backlog and commits to completing them during the sprint.
- Daily Stand-up: A brief daily meeting where team members report on what they did yesterday, what they plan to do today, and any blockers.
- Sprint Review: A demonstration of the working software delivered during the sprint, shared with stakeholders for feedback.
- Sprint Retrospective: A team reflection on the process: what went well, what could be improved, and what to do differently in the next sprint.
The Product Backlog
The product backlog is a prioritized list of everything the team might work on. It includes user stories, bug fixes, technical improvements, and other items. The product owner is responsible for maintaining and prioritizing the backlog.
Items at the top of the backlog should be small, well-understood, and ready to be picked up by the team. Items lower in the backlog can be larger and less defined.
The Minimum Viable Product (MVP)
A Minimum Viable Product is a version of a product with just enough features to satisfy early customers and to provide feedback for future product development. The MVP approach helps teams:
- Avoid building features that users don't actually want.
- Get feedback from real users as early as possible.
- Reduce the risk of wasted development effort.
- Deliver value sooner rather than later.
Agile Frameworks
Scrum
Scrum is the most popular Agile framework. It defines specific roles (Product Owner, Scrum Master, Development Team), artifacts (Product Backlog, Sprint Backlog, Increment), and ceremonies (Sprint Planning, Daily Scrum, Sprint Review, Sprint Retrospective).
Kanban
Kanban is a visual system for managing work as it moves through a process. Work items are represented on a Kanban board in columns that represent the stages of the workflow (To Do, In Progress, Done). Kanban focuses on limiting work in progress (WIP) to improve flow and reduce context switching.
Applying Agile to Tool Development
For our purposes, we will apply a simplified version of Agile to our tool development process. Each group will:
- Define user stories for their Minimum Viable Product.
- Prioritize those user stories based on importance and feasibility.
- Create a public GitHub repository and add user stories as issues.
- Work in weekly sprints, selecting issues to complete each week.
- Demo working software at each class session.
Links & Resources
- The Agile Manifesto
- What is Scrum?
- What is Kanban? — Atlassian guide
- Mastering Issues — GitHub guide to using issues for project management
Assignment
For next week, specify the functionality for your Minimum Viable Product. Define this functionality in user stories and prioritize them based on importance. Remember that these user stories need to be small in scope, preferably something you can implement in a single week. Create a public GitHub repository for your project and add these user stories as issues.