Gone are those copy-writer days where I have spent 3 hours on impact analysis document when I’ve changed a few lines of C++ code. When I co-founded XMinds, I was very clear on the process we are going to use and thus we adopted Agile where extreme change is the mantra and adapting to change is considered as the key to success. I’ve heard people saying ‘Agility’ means undisciplined practices where you often end up with zero documentation and ‘No’ schedules. I’d like to change that belief by emphasizing the key benefits the model holds.
Why Agile ?
I often wondered how I managed to release complex web applications in the past where the requirements changed almost every week. We did a good job in getting the project releases out but I must be the first to admit that the process was always irksome to a few of us. Being an entrepreneur myself, I now understand what would have gone through the minds of business owners or stakeholders when they changed the priorities overnight.
In this fast-paced world, how can they predict what their product needs in 2 months from now ? Today it might be content syndication and Facebook integration but next month it could be an API layer which their iPhone application uses to talk to the server. So ‘Embrace Change’, an old cliché is often the key to success. And what you need is a process that can adapt quickly to such rapid changes in priorities.
And ‘Agile‘ is the answer!
Value it brings
1. Continuous Integration (CI) – In traditional waterfall model, integration has to wait until the end of the development cycle and “the longer you wait, the more painful it is”. If we agree, then why can’t we always keep the code integrated ? And that’s where Continuous Integration comes into play. The idea is to build the code whenever a check-in happens and run all the automated tests and send reports to the concerned people. This process will ensure sure that unit tests are executed several times a day and thus avoiding late-night support calls. We rely on Hudson for build-automation and it does an awesome job.
2. Test Driven Development (TDD) – The idea is to create test cases that initially fails and then write the code to make them succeed. One thing I’ve noticed here is how important the tests are from an Agile perspective. When we write the code first, our propensity is always to get to the next feature and thus ignoring the tests completely. So TDD ensures that you get very good test-coverage and along with continuous integration you’ll get a high-quality-less-buggy product.
3. Better Planning – We work in small iterations and call it a ‘Sprint’. A Sprint is typically 2 to 4 weeks long and depends on how rapid you anticipate the priority changes are going to be. We write the requirements as user stories which are quite high-level but informative. Mike Cohn in his book User Stories Applied has suggested some formats for writing the stories
“As a (role) I want (something) so that (benefit)”
A Typical user story in the format above is “As a user I want to search for a product so that I can buy it”
We then break the user stories into small measurable tasks which give us better visibility and then they are added to the product backlog. A Sprint always aims at doing the high-priority tasks from the product backlog and during the sprint review meetings these features are demonstrated to the stakeholders.
Feedback from such meetings end up as new user stories in the backlog. So the core principle is short cycles of Plan-Do-Check-Act which helps to better plan the priorities.
4. Detect failures early – Since business owners and stakeholders are involved in every phase of the project starting from writing user stories to sprint planning to review meetings, problems become apparent and course of actions can be carried out to rectify it at an early stage. I’ve worked with clients who have a sense of detecting these problems very early and they will change the priorities in the next Sprint making sure they are fixed before they become too complex.
This is one important aspect of business where you have to embrace the change in priorities.
5. Collaboration – I’ve worked on several products that failed over time and most of them owing to not hearing what the customers have to say. So user involvement is a leading contributor to the success of a project and agile gives very high value to business owners collaborating continuously with their customers.
So Agile is the answer to your problems if you believe
1. You’re in a fast changing world
2. Your requirements are unclear
3. You value feedback from beta users very seriously
4. You value frequent scrutiny and adaptation
5. You value self-management through leadership and teamwork.
I was not an avid fan of Agile but after trying the methodologies in my organization I’m convinced that Agile is the way to go. I was more allured towards implementing a practice by taking the ‘good agile’ parts from Scrum and XP.
It’s totally up to you to decide what’s best for your organization but keep in mind, Agile makes the life easier by setting up time-boxed iterations and a decent feedback loop.