Agile Software Development Notes
Overview of Agile Software Development
- Agile software development is a way of thinking about software production that emerged from a desire for more adaptive and flexible processes compared to traditional methods like the Waterfall approach.
Digital Health Projects
- Focus on developing digital technologies to address health issues.
- Example project: Affinitie, which aims to reduce unnecessary blood transfusions in the UK.
Affinitie Software Development Process
- Motivation: 3 million blood transfusions annually in the UK; ~20% deemed unnecessary.
- Research Team Composition: Health psychologists, statisticians, doctors, NHS Blood and Transplant.
- Development Approach: Initially waterfall methodology with a clear set of requirements from the research team.
Waterfall vs. Agile Life Cycles
- **Waterfall Approach: **
- Linear progression: Design → Analysis → Code → Test → Deploy
- Each phase is completed before the next begins.
- Agile Approach:
- Iterative process with continuous feedback and improvement.
- Regular iteration cycles allow for adaptability and changes in the project.
The Agile Manifesto
- Drafted in winter 2001 by 17 developers.
- Core 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.
- Focus on flexibility, ongoing communication, and prioritizing client needs.
Twelve Agile Principles
- Highest priority is delivering working software continuously.
- Work at a sustainable pace.
- Embrace change even late in development.
- Rely on self-organizing teams.
- Regular collaboration with clients.
- Frequent delivery of working software.
- Continuous attention to technical excellence.
- Build projects around motivated individuals.
Agile Methods
- Different companies adopt different Agile methodologies based on their needs:
- Extreme Programming (XP): Focuses on rapid releases and frequent feedback.
- Test-driven development: Writing tests before coding.
- Scrum: Emphasizes team roles and project management principles.
- Kanban: Visual tool that shows how work progresses.
Extreme Programming Practices
- Pair Programming: Two programmers work together on one task.
- Benefits: Improved code quality, enhanced communication, collective ownership.
- Test-driven Development: Tests written before code ensures higher coverage and simplifies debugging.
- Continuous Integration: Regularly merging code changes to detect issues early.
Scrum Framework
- Daily Stand-up Meetings: Team members discuss progress and roadblocks.
- Roles:
- Scrum Master: Team leader facilitating the process.
- Product Backlog: List of tasks and deliverables.
- Sprints: Short, time-boxed periods for focused work.
Kanban Method
- Derived from Toyota's scheduling techniques.
- Uses visual boards to show task progress from "To Do" to "Done".
- Flexibility in layout and workflow management.
Problems with Agile
- Challenges include:
- Difficulty in creating legally binding contracts without a full specification.
- Less effective for existing projects needing maintenance (brownfield).
- Reliance on developers’ availability.
- Changing team dynamics may impact project continuity.
CHIME Project Overview
- Focuses on tracking health and lifestyle data to assist long-term condition management.
- Software Development Process: Agile, with the involvement of health organizations and end-users.
Recommended Readings
- Jensen, R. W. (2005). "A Pair Programming Experience".
- Cockburn, A., & Williams, L. (2001). "The Costs and Benefits of Pair Programming".
- Overview of the Agile Manifesto and approach.
- Resources for Kanban and Unit Testing.
Lab Class Reminder
- Final tasks before attending lab: Ensure research games and upload inspiring game mechanics to the team repository.