Agile Software Development


Agile Development

Agile development methods emerged to address the need for rapid software delivery in fast-changing business environments.

Businesses today operate in dynamic global markets where speed and adaptability are crucial. Traditional plan-driven approaches like the waterfall model proved too rigid for evolving requirements. Agile methodologies, including DSDM, Scrum, and Extreme Programming, emerged in the late 1990s to enable flexible, incremental development that delivers working software quickly and adapts to change.

Key Characteristics of Agile Development

  1. Specification, design, and implementation are interleaved rather than sequential
  2. System developed in incremental versions with stakeholder involvement
  3. Extensive use of automated testing and continuous integration
  4. Minimal documentation with focus on working software

Objectives

This chapter introduces agile software development methods. After reading, you will:

  • Understand the rationale for agile methods, the agile manifesto, and differences from plan-driven development
  • Know key practices in extreme programming and their relation to agile principles
  • Understand the Scrum approach to agile project management
  • Be aware of issues in scaling agile methods for large software systems

3.1 Agile Methods

In the 1980s and 1990s, software engineering emphasized plan-driven methods with extensive documentation and formal processes. While suitable for large, safety-critical systems, these methods proved inefficient for smaller business applications where the overhead of planning and documentation exceeded actual development time.

The Agile Manifesto

We value:

Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

Popular agile methods include Extreme Programming, Scrum, Crystal, and DSDM. While they use different processes, they share common principles based on incremental development, customer collaboration, and embracing change.

Figure 3.1 Agile Principles
Figure 3.1: The Principles of Agile Methods

Agile Principles

Customer Involvement

Customers should be closely involved throughout development, providing and prioritizing requirements and evaluating iterations.

Incremental Delivery

Software is developed in increments with customers specifying requirements for each increment.

People not Process

Skills of the development team should be recognized and exploited. Team members should develop their own ways of working.

Embrace Change

Expect system requirements to change and design the system to accommodate changes.

Maintain Simplicity

Focus on simplicity in both software and development process. Actively work to eliminate complexity.

Challenges and Limitations

While successful for small to medium-sized product development and custom systems, agile methods face challenges:

  • Customer representatives may not be available or able to dedicate sufficient time
  • Team members may lack personalities suited for intense collaboration
  • Prioritizing changes with many stakeholders can be difficult
  • Maintaining simplicity requires extra work under delivery pressure
  • Large organizations with established processes may resist cultural change

3.2 Plan-Driven and Agile Development

The distinction between plan-driven and agile approaches centers on how activities are organized. Plan-driven approaches separate stages with formal documentation between them, while agile approaches integrate activities iteratively.

Plan-driven specification
Figure 3.2: Plan-driven and agile specification

Key Differences

Plan-Driven Agile
Iteration within activities Iteration across activities
Formal documentation between stages Informal communication
Requirements then design Requirements and design together

Choosing the Right Approach

Consider these factors when deciding between plan-driven and agile approaches:

  1. Need for detailed specification before implementation
  2. Feasibility of incremental delivery and rapid feedback
  3. System size and team structure
  4. Type of system (e.g., real-time systems may need detailed design)
  5. Expected system lifetime and maintenance needs
  6. Available tool support and team organization
  7. Cultural and regulatory constraints
  8. Team skill levels and experience

In practice, most projects use a hybrid approach, adopting agile practices while maintaining some plan-driven elements based on their specific context and constraints.

3.3 Extreme Programming

Extreme Programming (XP) is one of the most widely used agile methods, developed by pushing recognized good practices to "extreme" levels. Multiple new versions may be developed, integrated, and tested in a single day.

XP Cycle
Figure 3.3: The Extreme Programming release cycle
XP Practices
Figure 3.4: Extreme Programming practices

Core XP Practices

Incremental Planning

Requirements as user stories; frequent small releases

Small Releases

Develop minimal useful set of functionality first

Test-First Development

Write tests before code; automated testing

Continuous Integration

Integrate and test new code as soon as written

Pair Programming

Two developers work together at one workstation

Refactoring

Continuously improve code structure

Collective Ownership

Anyone can change any code anywhere

Sustainable Pace

No excessive overtime; maintain quality

3.3.1 Testing in XP

Testing is central to XP, with test-first development being a key innovation. Tests are written before code, defining interfaces and behavior specifications. This approach reduces requirements ambiguity and ensures continuous validation.

Test-First Development Benefits:

  • Clarifies specifications before implementation
  • Discovers problems during development
  • Avoids "test lag" where implementation outpaces testing
  • Creates comprehensive automated test suite

However, test-first development has limitations: programmers may write incomplete tests, some tests (like UI tests) are difficult to write incrementally, and test coverage completeness is hard to judge.

3.3.2 Pair Programming

Pair programming involves two developers working together at one workstation. This practice supports collective ownership, acts as informal code review, and encourages refactoring. While it may seem inefficient, pairs often produce higher quality code faster than individuals working separately.

3.4 Agile Project Management

Scrum is an agile method focusing on managing iterative development rather than specific technical practices. It centers on product backlog management and sprint cycles for delivering increments.

Scrum Process
Figure 3.5: The Scrum sprint process

Scrum Process

  1. Initial Phase: Establish objectives, design architecture, outline product backlog
  2. Sprint Cycles: 2-4 week iterations developing system increments
  3. Project Closure: Complete documentation, assess lessons learned

Key Scrum Elements

Product Backlog

Prioritized list of features and requirements managed by Product Owner

Sprint Planning

Team selects backlog items for sprint and plans implementation

Daily Scrum

15-minute daily meeting to review progress and plan work

Sprint Review

Demonstrate completed work to stakeholders

3.5 Scaling Agile Methods

While agile methods work well for small teams, scaling them to large systems and organizations presents significant challenges. Large systems are complex, involve multiple teams, integrate with existing systems, and face regulatory constraints.

Challenges in Scaling

  • System Complexity: Large systems are collections of separate systems with distributed teams
  • Legacy Integration: Interaction with existing systems limits flexibility
  • Configuration Management: Significant effort in system configuration vs. new code
  • External Constraints: Regulations may require specific documentation and processes
  • Long Development Times: Difficult to maintain coherent teams over extended periods
  • Diverse Stakeholders: Impossible to involve all stakeholders directly

Scaling Up Strategies

To scale agile to large systems while maintaining core principles:

  1. Invest in upfront architecture design and critical documentation
  2. Establish cross-team communication mechanisms (video conferences, wikis, instant messaging)
  3. Maintain frequent builds and regular releases even if true continuous integration isn't feasible
  4. Adapt configuration management tools for multi-team development

Scaling Out Across Organizations

Introducing agile methods organization-wide faces cultural and procedural barriers. Large companies have established quality procedures, varying skill levels, and potential resistance to change. Success requires:

  • Management commitment and evangelists to promote change
  • Adaptation of organizational standards to accommodate agile practices
  • Significant resources devoted to cultural transformation
  • Patience—organizational change takes considerable time

While few large organizations have fully transitioned to agile across all projects, many successfully use hybrid approaches combining agile practices with traditional methods where appropriate.