The past few years have seen software methodology adopting a new style and going agile! Well known as Agile Methods, the style is adaptive, people oriented in nature and has stirred up a whole lot of interest. A kick reaction to engineering or plan driven methodologies, agile methods are attempts to compromise between no process and too much process. As well, Agile Methods tend to be:
Adaptive Not Predictive
Engineering methods mean a planned detailed software process covering a long time span, while resisting change. Agile methods, however, welcome it, they are processes that adapt and thrive on change, even to the point of changing themselves.
People-Oriented Rather Than Process-Oriented
Engineering methods aim at defining processes that work for whoever uses them. Agile methods assert a process cannot match the skills of a development team, they only play a support role in development team work. Indepth exploration of the differences makes it easier to understand what adaptive or people-centred processes are about, their benefits, drawbacks, and usefulness if used by developer or software customer.
PREDICTIVE Vs ADAPTIVE
Separating Design and Construction
Design and construction, two fundamentally different activities show that difficult to predict design requires expensively creative people, while easier to predict construction with only once design in place, can easier to predict construction begin.
Unpredictability of Requirements
In every project, developers can be heard complaining that the problem with the particular project is that requirements are always changing. Not surprising, as in building business software requirements, changes are the norm. The question is what is to be done as software development is a design activity that is hard to plan for and estimate the cost for, as basic materials change rapidly and much depends on which individual people are involved resulting in unpredictability.
Is Predictability Impossible?
While, predictability is very desirable, however letting it go does not mean reverting to uncontrollable chaos. All one needs is a process that gives control over unpredictability, which explains what adaptability is about.
Iterations – Controlling an Unpredictable Process
So, the key to an unpredictable world could be either iterative development or frequent production of the final system working version with a sub-set of the required features. While iterative development may be short on functionality, it is faithful to the demands of the final system. That is why these features should be fully integrated and carefully tested as the final delivery for best results. A far better process than traditional methods that document the entire process, which means flaws are hidden as in untested code. However, sitting in front of a system and working with it, reveals all flaws, both in terms of bugs and misunderstood requirements. Agile, an iterative and incremental process is adaptive in nature and totally able to deal with changes in required features. So, long term plans are fluid, while the only stable plans are short term plans made for single iterations. As well, iterative development also gives a firm foundation to each iteration, which means later plans can be based around it. The key question is, how long should an iteration be.
Different Agile methods suggest different time frames, e.g. XP suggests iterations of one or two weeks, SCRUM suggests a month, Crystal stretches it further. However, the tendency is to make each iteration, as short as one can get away with, as this not only provides more frequent feedback, but tells you where you are more often.
An adaptive process requires adaptive customers, since it gives them much more control over software development processes. They get to check progress made at every iteration, which allows them to alter the direction of software development, resulting in a much closer relationship with the software developers and the formation of a a true business partnership. The customer benefits due to numerous advantages of using agile methods, such as, much more responsive software development and a usable, although minimal system that goes into production early. As well, the customer can change system capabilities in keeping with changes in business, is also able to learn how the system is used in reality which allows for risk control and is indeed, a key advantage of iterative development. Further, keeping iteration lengths small means variations can be seen in different ways.
We continue to talk about Agile Solutions in Part II.