One of the first decisions we have to make for each of our project implementations is “Which development methodology should we use?” This topic creates lots of discussion and very often major arguments.

If you not have too much experience before, a definition of development methodology is in order. It is straight forward, it’s a way of organizing the work of software development. This is NOT about a style of project management or a specific technical approach, even though it creates big misunderstanding sometimes.

The two basic, most popular methodologies are:

Waterfall: “traditional” approach, basically is a sequential model where software development is segregated into a sequence of pre-defined phases – including feasibility, planning, design, build, test, production, and support.

Agile: follows a linear sequential approach while providing flexibility for changing project requirements, as they occur.

Both of these are usable, mature methodologies. Having been involved in software development projects for a long time, here are my thoughts on the strengths and weaknesses of each.

 

Agile Model Waterfall Model
Agile method proposes incremental and iterative approach to software design.

 

Development of the software flows sequentially from start to finish.
The customer has early and frequent opportunities to look at the product and make decision and changes to the project.

 

The customer can only see the product at the end of the project.
Agile model is considered unstructured compared to the waterfall model.

 

Waterfall model are more secure because they are so plan oriented.
Small projects can be implemented very fast. For large projects, it is difficult to estimate, most of the time implementations are done through release approach.

 

All sorts of project can be estimated and completed.
Defects/issues can be fixed in the middle of the project. Only at the end, the whole product is tested. If the requirement error is found or any changes have to be made, the project has to start from the beginning.

 

Development process is iterative, and the project is executed in short (2-4) weeks iterations. The development process is phased, and the phase is much bigger than iteration. Every phase ends with the detailed description of the next phase.

 

Documentation attends less priority than software development. Documentation is a top priority and can even use for training staff and upgrade the software with another team.

 

Every iteration has its own testing phase. It allows implementing regression testing every time new functions or logic are released.

 

Only after the development phase, the testing phase is executed because separate parts are not fully functional.
In agile testing when an iteration end, shippable features of the product is delivered to the customer. New features are usable right after shipment. It is useful when you have good contact with customers.

 

All features developed are delivered at once after the long implementation phase.
Testers, developers and business work together.

 

Testers work separately from developers.
At the end of every sprint, user acceptance is performed. User acceptance is performed at the end of the project.
It requires close communication with developers and together analyze requirements and planning.

Developer does not involve in requirement and planning process. Usually, time delays between tests and coding.