The principles of agile methods such as
Extreme Programming and
Lean Development are simple rules that govern
behaviour. They guide practices and facilitate decision-making at
the 'coal-face' rather than restricting it to the management
echelons of an organisation by providing a framework that enables
experienced agile developers to make intuitive decisions quickly
without having to wait for instructions or permission.
An experienced agile software development team is a highly social
group that is
self-organising around these
principles and acts with coordination and collective behaviour.
This collective behaviour comprises:
- Collective mind [1] where individual team members develop shared understandings of the team's tasks and of one another, and come to understand how their work contributes to the work of the team thereby facilitating team performance.
- Swarm intelligence which gives a team the ability to adapt to changes, and robustness which enables them to still perform and deliver even when one or more members fail.
- Humanity : Acknowledge human frailty, leverage human strengths, and balance individual and team needs.
- Economics : Enhance the option value of the software and the team while remembering the time value of money.
- Mutual benefit : All activities should benefit everyone.
- Self-similarity : When something works in one context, try it in another. Even if it eventually doesn't work, it's a start.
- Improvement : 'Perfect' is a verb and not an adjective. Always seek to improve.
- Diversity : The team should comprise people with different backgrounds, skills and perspectives.
- Reflection : Think about how you're working and why you're working.
- Flow : Deliver a steady flow of business value by engaging in all activities simultaneously.
- Opportunity : See problems as opportunities for change and learning.
-
Redundancy : Don't be afraid to include redundancy,
e.g. a distinct testing phase after development, if it helps
prevent disaster.
- Failure : If you're having trouble succeeding, don't be afraid to fail.
-
Quality : Always push for higher quality.
-
Baby steps : The overhead of small steps is less
than when a team wastefully recoils from aborted big changes.
-
Accepted responsibility : Responsibility cannot be
assigned. It can only be accepted.
- Eliminate waste and spend time only on what adds real value for the customer.
- Amplify learning and increase feedback when facing tough problems.
- Decide as late as possible to keep options open as long as practical, but no longer.
- Deliver as fast as possible , aiming to deliver value to the customer as soon as they request it.
- Empower the team so that people adding value use their full potential.
- Build integrity in , don't try to tack on integrity afterwards.
- See the whole , don't optimise parts at the expense of the whole.
[1] K. Weick and K. Roberts, "Collective Mind in Organizations: Heedful Interrelating on Flight Decks," Administrative Science Quarterly, 357-381 (1993).
1 Comment
You or your readers may be interested in this blog all about agile development:
http://www.allaboutagile.com
In particular there is a description of 10 key principles of agile development irrespective of which methodology you may be using:
http://kw-agiledevelopment.blogspot.com/2007/02/10-things-you-need-to-know-about-agile.html
And there's also an agile development forum "all about agile" for further discussion with peers:
http://www.groups.google.com/group/allaboutagile
I hope these resources are useful.
Kelly Waters
http://www.allaboutagile.com