Tuesday, November 07, 2006

Agile, Iterative or Waterfall?

There is been a lot of interest and mis-conceptions about various life cycle methods for solution development. Please note carefully I am saying solution development and not software development. Enterprises develop solutions to the problems. The software content of the solution is developed by IT sub-organisation. The rest of it is assigned to different sub-organisations within enterprise. So when we discuss software development life cycle methods (I'll use short form SDLC henceforth), we must remember solution development lifecycle methods (I'll use SolDev as short form, henceforth) as well. A software development and deployment method has to synchronize with solution development and deployment method.

There are various SDLC methods in vogue. Waterfall method has been in use for ages and has its supporters and detractors. Iterative methods originated some time back and are in use in many enterprises. Agile method is the newest kid on the block and yet to make serious inroads into enterprise IT scenario.

Waterfall is a sequential method, waiting for previous phase to finish completely and expects it to deliver a signed and sealed deliverable. This deliverable is enhanced in the next phase till software gets delivered. It assumes that the requirements are well understood and wont change during software development. It is most risky of development approaches and has quite a large failure rate.

Iterative method is iterative as it's name suggests. It creates a initial, fully functional version of system and iteratively adds functionality to it to make it complete. During each iteration it also takes into account user's feedback for the earlier delivered functionality and corrects the implementation.

Agile method is a more aggressive version of iterative method, where timelines are shorter and sacrosanct. It also believes in face to face communication rather than written documentation.

Each of them has their own strengths and weaknesses. And whether to choose one over other is not a trivial decision.

A solution development method is normally iterative or sometimes waterfall but rarely agile. Normally solution development and deployment involve dealing with real life things and they are not as soft as software. That may explain why they dont use agile methods that much.

Typically quick-fix and operational solutions rarely involve a big solution design and deployment effort. Major effort is consumed in software development and deployment. Hence agile methods can be deployed as SolDev method. whereas tactical and strategic solutions involve a significant solution design and deployment effort so an iterative method appears a right choice for SolDev. Modern enterprises rarely use waterfall method as it is too fraught with risk. Again I am referring to intent of the solution and not the systems, when I say operational, tactical or strategic.

For example,

If you were to repair a leaking window in your house. You would call the tradesman, interact with him and get the job done in a day or two. You will give constant feedabck and get it done as you want. This is a quick-fix solution and agile method can be (so to say) SDLC method.

Whereas if you were to add a conservatory to your house, you may have to interact with lots of tradesmen (or you outsource to a contractor), you have to worry about changing furniture setting in your house and may have to change nature of the games in your kid's birthday party. Thats a tactical solution and can hardly be agile. You may iterate over the development of this solution, by first building the conservatory then adding the furniture and relocating existing furniture. You also have to think about new games to include in birthday party, which take advantage of the conservatory and furniture settings. Here actual building of conservatory is like building software and other things you do is part of solution development and deployment. Both these need to follow same life cycle methods otherwise you'll have problems. And agile method for both SDLC and SolDev wont work because you would not have bandwidth to support sofwtare development (i.e. building conservatory) as well as solution development (i.e. doing other stuff such as buying new furniture, relocating old one ). And just SDLC can't be agile because rest of the solution will not be ready anyway.

Same goes about building a new house altogether. Thats a strategic solution. and you would still want an iteartive solution. Build the basic structure of the house. Add all utilities, then interiors and finally finishing. Constantly giving feedback and checking for yourself how the house is getting built.

You were to do it in waterfall model. You would call in a contractor tell him what you want and hope he does it before your required date. Well, if it is something as standardised as house building and contactor is reliable you may consider this option.


So its quite clear that different life cycle methods are suitable for different kinds of SolDev and SDLC. They have their strenghts, but need to be deployed in right kind of scenario. An enterprise architect needs to define the decision framework for making this choice, within an enterprise.

4 comments:

Anonymous said...

I bet you that you will build your house in an agile way, in that your architect will discuss the plans with you, will build model houses (or show computer models look-alike, walkthrough-view prototypes) to ensure that he's got planned what you want. That's not waterfall, that's prototyping, or spiral at least. Then, once you sign off plans, you will not tell your architect to go away and call you once the house is ready to move in. Rather, you will go and visit the building site every so often to check that what is being built is what you want. You will tell your architect immediately to fix this and that, that you changed your mind about that and this. That's akin to a continious build/test cycle, and really is not a waterfall approach at all. In fact, you are even likely to choose parts of your interior design (kitchen, window borders etc.), kitchen equipment, toilet furniture etc. while the house is being built. The two only instances where waterfall works is a) when you buy a pre-made, standardized condo, b) for the production cylce of any standardized product such as cars, watches, aircraft engines - oh no, wait, even there they build/test continously. Agile rules the world. It's so much easier to drive with your eyes open.

Vilas said...

You reinforce my point. Only difference between your position and mine is that I contend agile is an aggressive version of iterative development and may not suit all types of developments. I guess this is qiestion of definition rather than true difference of opinions.

Unknown said...

You are so right my friend. I see it as Spiral but Agile is basically the same just with different names.
Jonzo

Unknown said...

You are correct-
Agile only equates the spiral method to new terms.

Hmmm. You ever have a tiger team? A Focus team?
Agile is only another method that is a hybrid.
For me I always go with Spiral.

Tuesday, November 07, 2006

Agile, Iterative or Waterfall?

There is been a lot of interest and mis-conceptions about various life cycle methods for solution development. Please note carefully I am saying solution development and not software development. Enterprises develop solutions to the problems. The software content of the solution is developed by IT sub-organisation. The rest of it is assigned to different sub-organisations within enterprise. So when we discuss software development life cycle methods (I'll use short form SDLC henceforth), we must remember solution development lifecycle methods (I'll use SolDev as short form, henceforth) as well. A software development and deployment method has to synchronize with solution development and deployment method.

There are various SDLC methods in vogue. Waterfall method has been in use for ages and has its supporters and detractors. Iterative methods originated some time back and are in use in many enterprises. Agile method is the newest kid on the block and yet to make serious inroads into enterprise IT scenario.

Waterfall is a sequential method, waiting for previous phase to finish completely and expects it to deliver a signed and sealed deliverable. This deliverable is enhanced in the next phase till software gets delivered. It assumes that the requirements are well understood and wont change during software development. It is most risky of development approaches and has quite a large failure rate.

Iterative method is iterative as it's name suggests. It creates a initial, fully functional version of system and iteratively adds functionality to it to make it complete. During each iteration it also takes into account user's feedback for the earlier delivered functionality and corrects the implementation.

Agile method is a more aggressive version of iterative method, where timelines are shorter and sacrosanct. It also believes in face to face communication rather than written documentation.

Each of them has their own strengths and weaknesses. And whether to choose one over other is not a trivial decision.

A solution development method is normally iterative or sometimes waterfall but rarely agile. Normally solution development and deployment involve dealing with real life things and they are not as soft as software. That may explain why they dont use agile methods that much.

Typically quick-fix and operational solutions rarely involve a big solution design and deployment effort. Major effort is consumed in software development and deployment. Hence agile methods can be deployed as SolDev method. whereas tactical and strategic solutions involve a significant solution design and deployment effort so an iterative method appears a right choice for SolDev. Modern enterprises rarely use waterfall method as it is too fraught with risk. Again I am referring to intent of the solution and not the systems, when I say operational, tactical or strategic.

For example,

If you were to repair a leaking window in your house. You would call the tradesman, interact with him and get the job done in a day or two. You will give constant feedabck and get it done as you want. This is a quick-fix solution and agile method can be (so to say) SDLC method.

Whereas if you were to add a conservatory to your house, you may have to interact with lots of tradesmen (or you outsource to a contractor), you have to worry about changing furniture setting in your house and may have to change nature of the games in your kid's birthday party. Thats a tactical solution and can hardly be agile. You may iterate over the development of this solution, by first building the conservatory then adding the furniture and relocating existing furniture. You also have to think about new games to include in birthday party, which take advantage of the conservatory and furniture settings. Here actual building of conservatory is like building software and other things you do is part of solution development and deployment. Both these need to follow same life cycle methods otherwise you'll have problems. And agile method for both SDLC and SolDev wont work because you would not have bandwidth to support sofwtare development (i.e. building conservatory) as well as solution development (i.e. doing other stuff such as buying new furniture, relocating old one ). And just SDLC can't be agile because rest of the solution will not be ready anyway.

Same goes about building a new house altogether. Thats a strategic solution. and you would still want an iteartive solution. Build the basic structure of the house. Add all utilities, then interiors and finally finishing. Constantly giving feedback and checking for yourself how the house is getting built.

You were to do it in waterfall model. You would call in a contractor tell him what you want and hope he does it before your required date. Well, if it is something as standardised as house building and contactor is reliable you may consider this option.


So its quite clear that different life cycle methods are suitable for different kinds of SolDev and SDLC. They have their strenghts, but need to be deployed in right kind of scenario. An enterprise architect needs to define the decision framework for making this choice, within an enterprise.

4 comments:

Anonymous said...

I bet you that you will build your house in an agile way, in that your architect will discuss the plans with you, will build model houses (or show computer models look-alike, walkthrough-view prototypes) to ensure that he's got planned what you want. That's not waterfall, that's prototyping, or spiral at least. Then, once you sign off plans, you will not tell your architect to go away and call you once the house is ready to move in. Rather, you will go and visit the building site every so often to check that what is being built is what you want. You will tell your architect immediately to fix this and that, that you changed your mind about that and this. That's akin to a continious build/test cycle, and really is not a waterfall approach at all. In fact, you are even likely to choose parts of your interior design (kitchen, window borders etc.), kitchen equipment, toilet furniture etc. while the house is being built. The two only instances where waterfall works is a) when you buy a pre-made, standardized condo, b) for the production cylce of any standardized product such as cars, watches, aircraft engines - oh no, wait, even there they build/test continously. Agile rules the world. It's so much easier to drive with your eyes open.

Vilas said...

You reinforce my point. Only difference between your position and mine is that I contend agile is an aggressive version of iterative development and may not suit all types of developments. I guess this is qiestion of definition rather than true difference of opinions.

Unknown said...

You are so right my friend. I see it as Spiral but Agile is basically the same just with different names.
Jonzo

Unknown said...

You are correct-
Agile only equates the spiral method to new terms.

Hmmm. You ever have a tiger team? A Focus team?
Agile is only another method that is a hybrid.
For me I always go with Spiral.