The agile approach is to plan for what is known and to iterate against
what is not known. Agile development thus focuses on building knowledge
about value, cost and schedule and adjusting the plan to match reality.
Agile values
The Agile values are defined in the Agile Manifesto co-authored
by 17 experts (Utah, April 11-13, 2001).
We are uncovering better ways of developing software by
doing it and helping others do it.
Through this work we have come to 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
That is, while there is value in the items on the right, we value
the items on the left more.
Authors: Kent Beck1, Mike Beedle, Arie van Beenekum, Alistair Cockburn,
Ward Cunningham1, Martin Fowler, James Grenning, Jim Highsmith,
Andrew Hunt, Ron Jeffries, John Kern, Brian Marick, Robert C. Martin,
Stever Mellor, Ken Schwaber, Jeff Sutherland, Dave Thomas.
Agile principles
An Agile process should obey the following 12 principles:
-
Our highest priority is to satisfy the customer through early and
continuous delivery of valuable software.
-
Welcome changing requirements, even late in development.
-
Deliver working software frequently, from a couple of weeks to a
couple of months, with a preference to the shorter timescale.
-
Business people and developers must work together daily throughout
the project.
-
Build projects around motivated individuals.
-
The most efficient and effective method of conveying information to
and within a development team is face-to-face conversation.
-
Working software is the primary measure of progress.
-
Agile processes promote sustainable development.
-
Continuous attention to technical excellence and good design enhances agility.
-
Simplicity — the art of maximizing the amount of work not done
— is essential.
-
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.
Agile principles emphasize building working software that people can get
hands on quickly, versus spending a lot of time writing specifications up
front.
Agile practices
While Agile principles must be preserved during the project lifetime
Agile practices must be adapted with changes.
A waterfall project carries many uncertain features forward to the
testing phases just before shipping. An agile project eliminates the
uncertainty in small iterations that include every part of development.
FIGURE 2.4
"Finding the fun", Agile Game Development.
Here are some thumb rules for a project:
- You break big problems down into smaller ones.
- You focus on the really important stuff and forget everything else.
-
You make sure that what you are delivering works.
→ Do lots of testing, early and often.
- You go looking for feedback.
-
You change course when necessary.
→ Change your project plan as things change.
-
You become accountable.
→ Spend customer's money as if it were yours.
Agile planning
The master story list is prioritized by the customer and estimated by
the development team. It forms the basis of your project plan and serves
as a velocity tracker (how much can get done per iteration) and as a
predictor (how much will get done in the future).
Adaptive planning is a cornerstone of agile delivery: when reality
disagrees with your plan, you’ll change your plan.
Delivering a feature in Agile means doing everything necessary to produce
shippable code (100% complete=analysis+design+coding+testing+more).
Agile teams
Agile teams adhere to rigid development practices such as good design,
continuous refactoring to keep interfaces and code clean, automated and
continuous integration of code, automated unit tests and integration tests.
-
Agile teams must be able to self-organize.
-
Business people and developers must work together daily throughout
the project.
-
Build projects around motivated individuals, give them the environment
and support they need and trust them to get the job done. The best
architectures, requirements and designs emerge from self-organizing
teams.
Blurring roles, continuous development activities and team accountability
are the main characteristics of an Agile team.
-
There exist no narrowly defined roles like analyst, programmer, tester
or documentation writer. Do privilege generalists when recruiting people
for your team.
-
Analysis, coding, design, testing and documenting are continuous and
non-isolated activities.
-
Optimally, a team should include up to seven people located in an open
work area.
-
Quality is a team responsibility.
About the Author
Stéphane Micheloud is a senior software engineer. He holds a Ph.D in
computer science from
EPFL and a M.Sc in
computer science from
ETHZ. At EPFL he
worked on distributed programming and advanced compiler techniques and
participated for over six years to the
Scala project. Previously he was professor in computer science at
HES-SO // Valais in
Sierre, Switzerland.
Other Articles