Aman King

AgileControl PanelChange LogBrowse PagesSearch?

Agile

I'm a big Agile fan. I closely follow material written about it, especially Martin Fowler's work. I used to conduct training sessions on the basics of Agile for the new joinees in my previous company. Recently I've started giving talks on Agile, like in PLUG Mash and Barcamp Bangalore.

Here's an excerpt from a paper I wrote; it basically summarizes what I think of Agile (also check out these Agile links):

Agile

Agile is a conceptual approach toward software development that is based on certain principles. It is more of a philosophy than a rigid method and any software process that imbibes the prescribed principles can be said to be 'agile'.

It all started when 17 software engineers met in 2001 to discuss how they could unify their respective methodologies under one umbrella. They saw that their methods shared common values; they listed these as the Agile Manifesto.

Agile Values

Agilists say that they value:

  • Individuals and interactions over processes and tools
  • Working software over comprehensive documentation
  • Customer collaboration over contract negotiation
  • Responding to change over following a plan


My take on Agile methods is that they are about:

  • Developing software in short iterations called timeboxes (usually measured in weeks)
  • Real-time communication of everyone with everyone; this includes developers, testers, managers, customers and anyone else involved in the software development process; there is no hierarchy in communication
  • Working code, ie, code that gets the job done and survives continuous integration and testing
  • Welcoming change instead of discouraging it
  • Adapting and evolving over time
  • The just enough approach

Of the above, the last point is the most important. It encompasses the essence of being agile. The just enough approach is just that: doing only as much as needed, not any more, not any less. This is applied to every aspect of software development – requirement gathering, designing, planning, coding, testing and documenting. This allows for flexibility, the ability to accommodate change at any stage of development, even real late. It is a natural outcome as we haven’t already planned or done too much ahead of time and hence hardly any effort is wasted when requirements change.

Examples of Agile methods include Extreme Programming, Scrum, Crystal Clear, ASD, and so on.

Some Agile Programming Practices

Continuous integration and testing

Agile is about frequent software builds and releases. This makes continuous integration and testing of the various modules extremely important. Test automation and configuration management help realize this.

Quick coding and frequent refactoring

Many of the Agile methods suggest a development pattern that involves creating quick and immediate programmatic solutions to the problem at hand and later reviewing and refactoring them as necessary.

Single artifact, multiple forms

This refers to an ideal of having only a single artifact that records a concept and having other artifacts like code, documentation, use cases, etc generated as views from that artifact instead of having them as multiple records of the same concept. This increases maintainability, traceability and consistency. The core artifact usually preferred is the source code.

Good flexible design

Even though Agile methods follow the just enough approach, the design should be such that it can easily incorporate changes in requirements.

Component/plugin-based architecture

A component-based architecture provides flexibility, configurability and customisability. New or changing requirements can be handled by simply modifying and/or adding a few components instead of having to rework the entire system.

Tags: technology:agile Last modified 09:18 Sun, 6 Jan 2008 by AmanKing. Accessed 687 times Children What Links Here share Share Except where expressly noted, this work is licensed under a Creative Commons License.