Chapter 3 Agile Software Development
Chapter 3 Agile Software Development
People, Not Process Focus on the skills of the development team, allowing them to work in
their own ways.
Maintain Simplicity Focus on simplicity in both software being developed and the
development process.
Agile Method Applicability
• When to Use Agile Methods:
– Product development for small/medium products.
– Custom system development with active customer involvement.
• Factors to Consider:
– Type of system: Plan-driven for complex systems.
– System lifetime: Long-lifetime systems may need more
documentation.
– Available technologies: Agile methods rely on good tools.
– Team organization: If the team is distributed, design documents
may be necessary.
Additional Technical, Human, Organizational Issues
• Factors to Consider:
– Cultural or organizational issues: Traditional engineering
cultures may lean toward plan-driven methods.
– Skill level of designers/programmers: Agile methods often
require higher skill levels.
– External regulations: Systems needing approval from regulators
require detailed documentation.
Extreme Programming (XP)
• Overview:
– A well-known and widely used Agile method.
• XP Features:
– New versions may be built several times per day.
– Increments delivered to customers every 2 weeks.
– Tests must be passed before the build is accepted.
XP and Agile Principles
• XP Supports Agile Principles:
– Incremental Development: Small, frequent releases.
– Customer Involvement: Full-time customer engagement.
– People, Not Process: Pair programming, collective ownership,
and avoiding long hours.
– Change Support: Regular system releases.
– Simplicity: Constant code refactoring.
The extreme programming release cycle
Extreme Programming (XP) Practices
(A) Development Practices
1. Incremental Planning – Requirements are written on story cards, and
developers break them into tasks based on priority and available time.
2. Small Releases – The first version includes the most valuable features,
with frequent updates adding functionality.
3. Simple Design – Only design what is needed for the current
requirements, avoiding unnecessary complexity.
4. Test-First Development – Write automated tests before coding the
actual functionality.
5. Refactoring – Continuously improve code for simplicity and
maintainability.
(B) Team Practices