Title: Agile! Date: 2011-02-03 08:11 Author: eamonnfaherty Category: agile Tags: agile Slug: agile
This is the first in a series of posts about agile development. It is going to be my experiences (both good and bad) and how I think agile could work and what it needs in order to work.
What is agile software engineering?
I think it is best described quoting the 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
That is, while there is value in the items on
the right, we value the items on the left more.
For me, agile software development is about breaking development into smaller parts (iterations), which are easier to define and manage. Each small part should be dealt with only once the previous one is completed and each part should be discussed with somebody who knows the current business requirements before it is started. This is to keep the feedback loop as small as possible. This means that the work of the team is always providing business value and is always aligned with what the business wants at the time.
Saying this is much easier than doing it. There are many difficulties avoiding up front planning:
- Planning is tough as people just want to get ‘stuck in’, so when a piece of work is completed they want to start the next piece as soon as possible, skipping/rushing planning.
- Planning is tough as people from the business are not always available for meetings. This means that planning has to wait or is rushed.
- Some people find that working on smaller iterations means they lose site of the ‘bigger picture’.
- It is harder to estimate the size of the whole project up front as there is no up front design.
- The code base must be of good quality to cope with change of requirements. There is a need to refactor the code base to keep it free from software rot.
- This methodology is new and people are not used to it. Trained/experienced people are hard to find.