Thursday 29 January 2009

Are you Agile?

This simple question can lead to really heated debate. It's so, because the idea about what the Agile Software Development is can vary significantly among the people. To answer question "Are you Agile?" you have to first define the minimum criteria for being Agile, here is a list of potential candidates: self-organizing teams, incremental development in short iterations, high responsiveness to changing requirements, continuous adjustments, everyday contact with stakeholders, pair programing, TDD, (automated) testing and so on ...

The list may actually be much longer. Those are all desired practices but surly you don't have follow all of them to be Agile right? I figured that the best way to sort out this puzzle will be to check the basis - The Manifesto for Agile Software Development and Principles behind the Agile Manifesto.

What is not there:
  • nothing about pair programing, TDD and testing although "Agile processes promote sustainable development" so you don't have write tests and still you can say that you are Agile ;)
  • surprisingly, short iterations are not a must but remember to "deliver working software frequently"

What is on the list:
  • "highest priority is to satisfy the customer" - this is our main goal, in the end ... they pay for our time.
  • "business people and developers must work together daily throughout the project" and "the most efficient and effective method of conveying information to and within a development team is face-to-face conversation" - which means that you should avoid, whenever possible, writing documents, emails, using Skype or MSN. Talk to team-mates and stakeholders, ask questions and be proactive ... if you can't talk face-to-face then try to call someone rather then writing an email ... it might be much harder as it requires more effort but it also gives the best results.
  • "working software is the primary measure of progress" - I like this rule as it clearly states what really matters ... our job is to deliver working software, not just a random number of classes or lines of code ... job is done when your software works as expected by stackholder and is available for others.
  • "simplicity -- the art of maximizing the amount of work not done" and "continuous attention to technical excellence" - this prevents people from releasing shitty software and saying that Agile is about delivering something fast and then improving it later. Agile Development can't be an excuse for poor design and low quality.
  • "at regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly" - this principle is absolutely essential, if you follow a rigid process it's obvious that you are not Agile. Agile is about striving for optimal effectiveness therefore you have to be flexible, you have look for ways to improve the process you follow.

So are you Agile?

I my opinion there are two rules which have to be followed to answer "Yes":
  • deliver frequently - it guarantees frequent feedback and gives confidence that you are still on track with time and requirements.
  • adjust the process to be more effective - you have to constantly try new things, experiment how to make you work more enjoyable and effective.
What criteria do you use to call a process Agile?

6 comments:

Unknown said...

Hi, interesting post, as you wrote, defining how the development can be "agile" has a lot of meanings depending how the team is doing it, but your rules are mostly true.
I wonder what could be the "deliver frequently" reasonable value. What do you think is a right one? (1w, 2w, 1m, 2m).

Blotko said...

Hi Fernando, "deliver frequently" means something else for 2 months project and for 2 years project. Short projects are usually also very dynamic so you need to get feedback from client more frequently ... there is also a rule saying that you should have at least 5-6 iterations within the project. I have seen two weeks project where people were delivering every 2 days but also long lasting project where it probably makes much more sense to have 3 or 4 weeks iterations. Personally I would not extend iteration to 2 months.
Those are default values for me but those values should be adjusted by the team ... each team and each project is different so you have to find on your own what works the best for you.

Here you can find post which may give you more detailed answer:
Scrum - why extending sprint (iteration) length is usually not a good idea

Dennis Sellinger said...

Nice article. I think it sums up agile very nicely from our group's point of view. The interesting thing about this is that I work with a very small group (2 or 3 people) on a large-ish system (+130 KLOC C#). All the developers have other responsibilities within the organization. Such a team is not the poster child for agile development, so we have to be careful in choosing our practices.

We try to release a coherent set of new functionality every 6 weeks. And every iteration we spend one full day reviewing what went wrong and what went right with the iteration in hopes that the next will be better.

I think if small teams are to be competitive this is the only way to survive - that is find a way to write better software faster.

poona said...

Wonderful blog & good post.Its really helpful for me, awaiting for more new post. Keep Blogging!





Agile Coaching

AlanBarlow said...

A really difficult question.
buy logos

Haris said...

Thank you for sharing it with us.
I am really happy to see this blog.
It is very helpful for me.

Nursing assignment help