Pages

Monday, April 23, 2012

Agile Software Development


Definition: 

Agile software development is a group of software development methods based on iterative and incremental development, where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams.

Agile Manifesto:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan
The most important thing to know about Agile methods or processes is that there is no such thing. There are only Agile teams. The processes we describe as Agile are environments for a team to learn how to be Agile.

A group of people created the Manifesto for Agile Software Development that 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, while explicitly acknowledging the value of the latter items.

Craftsmanship, Chief Programmers, and Individuals
Agile software development focuses on individual competency and on motivated individuals (‘Build projects around motivated individuals.’). This attitude is also described by the term craftsmanship [6], and manifests in pair programming, collective code ownership and mentoring in XP, or chief programmers in FDD.

Team Size
While successful agile projects of up to 250 people are cited [6], most authors see a size limit at about 15 to 20 persons due to the tightly coordinated teamwork necessary.

Self-Organizing Teams
Agile development stresses the importance of self-organizing teams that are able to rapidly adjust to changing requirements and new challenges (‘The best architectures, requirements, and designs emerge from self-organizing teams.’, ‘At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.’).

Team Co-location
Agile development aims at close, personal contact and collaboration within the development team (‘the most efficient and effective method of conveying information to and within a development team is face-to-face conversation.’).

Customer Interactions
In agile development, the continuos interaction and collaboration with the customers is paramount. A short feedback loop is necessary to be able to respond quickly to new information like changes in the requirements. These principles are embodied in practices like customer on site in XP.

Early Delivery of Working Code and Feedback
Agile development sees working code as the ‘primary measure of progress’. To use this measure in the collaboration with customers, and in order to ensure short feedback cycles, frequent releases of working software are intended (‘Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.’). These practices increase the motivation for all participants, allow for easier discussion of the current status and therefore increased chances to uncover necessary changes and efficient possibilities for incorporating them (‘Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.’).

Changing Requirements, Good Design, and Simplicity
Closely connected to frequent releases is the attitude of agile development towards change. As release and feedback cycles are short, changes in the requirements happening anyhow due to the turbulent environment can easily be uncovered, and can more easily be implemented than at the end of the development (‘Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.’). Incorporating these changes in addition needs an appropriate design (‘Continuous attention to technical excellence and good design enhances agility.’). Therefore agile development stresses the importance of having a simple design that allows for easy changes (‘Simplicity - the art of maximizing the amount of work not done - is essential.’) and refactoring.

References:

  • Agile Principles and Open Source Software Development: A Theoretical and Empirical DiscussionStefan Koch 
  • http://www.agile-process.org/
  • http://www.agilealliance.org/




No comments:

Post a Comment