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 Discussion, Stefan Koch
- http://www.agile-process.org/
- http://www.agilealliance.org/
No comments:
Post a Comment