Software development is the process followed for the design, development and successful deployment of software. There are various traditional methodologies used to achieve this in an orderly fashion. Agile is a software development methodology to build software incrementally so that the software development is aligned with the changing business needs. Instead of the long drawn out release cycles within the previously widespread waterfall methodology, the agile technique suggests regular short sprint release cycles. It is relatively new methodology whose main objective is to fulfill the constantly changing customer needs. Agile mainly addresses the problem of rapid changing world. Its objective is to reduce the overall cost of the project which increases due to encompass the changing requirement as well as reduce the decision making time.
The four main pillars of agile are:
1. People over process: The customer needs are given more importance than the flow of process. It adjusts the ever changing customer requirements in such a way that the customer is satisfied with the end product within the mentioned budget.
2. Code over documents: It demands working software to present to the customer instead of redundant documents. It believes that a working prototype gives the user more clear idea into its requirement thus making the objective of the product more clear.
3. Customer interaction over negotiation: The customer needs are tried and accomadated in the project rather than negotiated and removed.
4. Change over plan: Agile follows the iterative type of flow to accommodate change in an orderly fashion. Plan is just a general layout not a blueprint which has to be followed to the dot. 5
One of the disadvantages of traditional methodology is that it cannot show the final look of the project until the whole process is finished and by the time maybe the customer requirements may change. Agile processes believes that presenting a working code to the customer gives a more clear picture of the software the customer wants rather than showing it on document with UML diagrams. This gives the customer the chance to review their requirements and make appropriate changes. Using a team of people who have good rapport between them is highly effective as it is more convenient and effective to exchange ideas about the requirements or task than wait for the paperwork and waste time. Individual efforts put together is more effective as there is different exchange of ideas and experiences which helps solve various problems in less time. It does not matter if the number of people in the team is less as long as they are competent enough to handle everything plus the collaboration would be easier between them. It is better to have few knowledgeable members who have same wavelength than more people with different compatibilities. 2
Agile seems like undisciplined methodology however it is not possible to deliver a product, when working in a team, without discipline. The difference is it does not portray the manager as a leader who has to discipline the team members; It wants its members to be self disciplined and organized. They should be skillful and able to complete their task in the designated time so that they don’t hinder the team work. All the members have their own weakness and strengths which should be use to the fullest in such a way that they make sense and properly complete the product. Self discipline is very important for good collaboration. 3
Individual competence is referred to the skills a person pertains to successfully finish a job. If a person is well trained and knowledgeable it would be easier for him to finish the task. Moreover he would be able to handle any change mentioned by the customer in such a way that would not disrupt the process or increase the overhead cost. Process provides a framework for the completion of task but if the person is not competent however good the framework is, the person will not be able to execute it properly and the system will fail. So individual competence plays important role in the success of agile. 1
Team competence is dependent on individual competence. Agile teams require self organizing people who can regroup them self according to the challenges they face. They should have respect and trust in each other to take fast decision and solve any ambiguity. I think team is competent if its team members are competent, as skill plays important role in agile. If any of the members is less knowledgeable than others then it will create a wavelength gap which will hinder their collaboration and thus slow the development process. Scrum has regular morning meetings to discuss individual as well as team progress which keeps all the team members in the loop as to what is the progress and makes them introspect to what more they should work on. 1
Communication and collaboration sounds the same but are very different when actually seen in use. Communication refers to the transfer of information between people but collaboration means to communicate and get a consensus on a decision. Collaboration in agile requires the members to timely communicate with each other in such a way that they agree on mutual decision if ambiguity presents itself. 1
In my opinion agile processes is an attempt of micromanagement. The most attractive thing about agile, which sets it aside, is its principle of team collaboration and regular customer interaction. Managers have assigned meetings with the team members every other morning to discuss about the progress of individual members as well as team collaboration to know the status of the project and future tasks. The manager just keeps tabs on each task to accordingly time the project; its intention is just to monitor not to give orders. The customer is regularly consulted after each iteration for feedback so that he is kept in the loop and has more control over the product. In a way all the details are micromanaged to fulfill the customer’s requirement to the fullest. 4
Agile process does not involve planning, design and testing in its framework. Agile follows iterative methodology to include the regular changes of the customer so the planning is not definite but more general which changes with every iteration. The process does not conform itself to the plan. Secondly, agile believes in producing a working code rather than documentation, so there is no separate phase such as designing. The task to be done is discussed in the scrum meeting and regular informal meeting between team members and managers to discuss the features of the product. After each iteration again the plan and design is revised according to the feature. Testing is not a different phase in agile, Testing and development are combined into one phase and implemented simultaneously. XP uses the concept of pair programming to develop and test the code simultaneously for more efficient results. 4