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:
    1. Individuals and interactions over processes and tools.
    2. Working software over comprehensive documentation.
    3. Customer collaboration over contract negotiation.
    4. 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

  1. Jensen, R. W. (2005). "A Pair Programming Experience".
  2. Cockburn, A., & Williams, L. (2001). "The Costs and Benefits of Pair Programming".
  3. Overview of the Agile Manifesto and approach.
  4. 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.