Thursday, 9 October 2008

Agility - Agile Software Development


The world is changing and it's natural as well as inevitable. The world has been designed to change from the beginning. Nothing is stable and nothing can be insured in the real meaning.

That's why we have risks, because nothing is completely predictable and we are living in the world of uncertainty.

Our body, our neighbours, the earth, our parents, our society, our economy, our sky, seas, technology, structures.

There is no guarantee that when we sleep tonight, we will wake up tomorrow!
There is no certain guarantee that the job we have today, we will have tomorrow as well.
When driving everything is changing in the road.
Our body cells are changing every second.
Our economy is changing.
The weather is changing.
So many books that we have read and were the latest at the time, are joining the history.

It's important to acknowledge that everything is changing; few with our will and many without our will, some rapidly some slowly. This acknowledgement helps us think about the solutions to handle these situations.


How can we control and manage the changes?

"Agility is the ability to respond rapidly and effectively to the changes which are happening in the world."

It's good to say that agility is contextual. Values are contextual. Priorities are contextual. Laws are contextual. Many things in our world are contextual. A law which is valid in a country might be totally invalid in another country. There are values which are valid in some countries and invalid in the others.

Everything in the world must be agile to succeed, otherwise it will die and fail soon.
e.g driving must be agile; you must have the ability to respond quickly and effectively to the changes which are happening in the road.

How to be agile in business? A business which is not agile will fail soon or late.

What are the principles/metrics of becoming agile?

I think the first step is to determine in which context we want to define agility, then to find principles for that context. Contexts like:

  1. Driving

  2. Software Development

  3. Consultancy

  4. Business

  5. Family

  6. Society

  7. Computer

Have a look at David Anderson presentation.

Agile Software Development - Principles/Best Practices

There are some methodologies and approaches that are Agile like AUP, SCRUM, XP and here I would like to share with you some best practices:

1) Develop quickly and deliver more often. In this way, the development will have more control over the changes of business environments. Business must be aware of this change and educated wherever required. Business must get involved consistently not just for gathering the requirements but also to provide feedback on the releases of the application.

2) Define iterations, each which for a period of 2-3 weeks. Plan for each iteration, when to start, what should be achieved at the end of the iteration (milestone), when the end of iteration is and who should work on this iteration.

3) Have daily standup meeting to review the progress of each iteration and tackle issues as soon as possible with prioritizing based on the importance to the business. Having consistent and proper communication is vital to the success of the project.

4) Reuse the existing code/components wherever possible and improve them whenever possible.

5) Use automated testing tools, so that you can test more code in less time e.g. write your tests using NUnit, then automate the tests to run using CruiseControl.NET. Automated testing improves productivity.

6) Test during the lifecycle of the development. Do not leave testing to the end. use Test Driven Development.

7) Use Web-Oriented Architecture, which means we should develop applications to be distributable over the web. SaaS (Software as a service)

8) Plan and schedule the security at the early stage of the software development. The later it's left, the harder it becomes to integrate it in the system.

No comments: