The modern business world is rapidly changing and it is the responsibility of the developers to effectively respond to these ever-changing requirements. Agility, in terms of software development, refers embracing these changes and working towards delivering the product to the client at the scheduled time. Further, the principles underlying the agile position to software development are stated in the “Agile Manifesto”. Firstly, it states that an agile process gives more priority to individuals and interactions rather than process and tools. 1 In agile development there is a serious focus on people factors such as amicability (the interpersonal relationship an individual in a team has with his/her mates), talent (abilities that an individual possesses and manoeuvring the same for the benefit of the project), skill (abilities that an individual should additionally learn and possess) and communication (which should be done clearly and effectively without ambiguity). Further, informal modes of communication like personal conversations rather than documentation are followed which saves a considerable amount of time. Moreover, the team works towards building a working software rather than focusing on detailed comprehensive documentation. As agile follows the incremental model, priority is given to delivering a part of the software at the end iteration. Design and other documentation are kept informal among the team members. Further, agile model encourages customer collaboration and does not focus on contract negotiation. The customer is involved in the development process and rapid feedback is provided by the customer and it helps the team to quickly change the direction of development according to the customer’s needs. Last but not the least agile methodologies respond to change prior to following a plan. Precious time is not utilized on forming and then following a plan to tackle the requirement change stated by the customer rather the team collectively works to adapt the existing software so that it incorporates the changes desired by the customer.
One of the key concepts emphasized on by agile methodologies is the unforgiving honesty of working code. As agile works towards a quick response to change, whatever changes are requested by the customer are implemented in real. The working software is at the team’s disposal and it’s their decision as to what is to be done with it according to the customer requirements. The code is “real” proving that agile methodologies get the work done and makes no false promises. The above stated is achieved due to the effectiveness of people working together in goodwill. For a given task, the team assigns the sub-tasks such that the person or the group of people handling a sub-task are experienced in that domain, effectively decreasing the cost to train the entire team for a particular sub-task. This helps in achieving the set goal well before time with ease. The agile team at the start of an iteration, cleverly assigns the task, giving a direction to the team, so that it completely and efficiently achieves its goal.
Another key concept critical to the agile model is using better and fewer people that is using few people of high competency when forming a team. As agile methodologies do not perform the activities that not critical to the delivery of the software, these teams require top talent which can productively contribute to software development activities and can perform tasks at great speeds. Even if the team has a few less competent members, the final product delivered is pretty much the same, but the mismatch of competencies gravely influences all the phases of the software development lifecycle by either slowing down the pace of each phase or utilization of extra resources in a phase as these less competent individuals are left behind.
Last but not the least according to Kent Beck, Agility is only possible through greater discipline on part of everyone involved. Here discipline has various meanings and agile processes should follow them to be successful. The paper talks about these various definitions in terms of Extreme Programming. Firstly, he refers to discipline as a field of study: Not just in terms of extreme programming, all the processes have a various set of requirements that each and every member of the team should acquire for the process to be successful. Discipline can also be defined as a training that corrects, moulds or perfects mental faculties. As agile methods follow weekly planning, continuous integration of software, daily status calls, test-first development, pair programming it helps an individual to learn new things, improve their weakness and in the end, can be perfect in a particular domain because of the close watch on their daily activities. Further, discipline is also defined as gaining control and enforcing obedience and power, and agile methodologies fail this definition as they don’t follow any rules. In the end, all agile methods work towards are to deliver a working software to the client. This does not mean that planning is not done, but they are not stringent on a plan of action. Their rules keep changing according to the requirements. Further discipline is also defined as orderly behaviour which in agile means that every team member knows exactly what the other team member is working on. Last but not the least, discipline is also defined as a set of rules governing the conduct. Agile methodologies though do not have rules when they develop an increment, yes they follow a plan and that also might change but there are no rules, but on a larger scale rules are present like an increment will not be delivered till the time all the test cases are not passed. All the above definitions of discipline are followed by agile methodologies except the assertion of obedience but that does not mean that agility is defined by discipline will be ruled out because one definition of such a broad meaning word is not satisfied.
A key factor on which the success of agile methodologies is based is individual competence. It is believed that if individuals in the team are skilled enough then no matter what process the team follows the individuals are bound to be successful. Agile requires individuals to be competent as there is no strict process followed for software development and requires an individual to work under rapidly changing team directions. However, a competent individual can fail if he/she does not receive the desired user and executive support due to some internal dirty politics. Further, the presence of an experienced project manager helps in keeping an individual motivated by regulating healthy team dynamics and taking care of any politics involved. It has also been noticed that an individual can stay competitive if the surrounding staff is equally competent. This factor can act as a driving force for an individual to perform better and outshine among his colleagues. Further, a team with a competent staff can design and develop a software of quality much higher as compared to the software developed by an individual alone. For instance, in a scenario where there is an addition in the requirements, a competent individual might be given the task to implement that additional requirement while the rest of the team focuses on developing the product. If the task given to the individual is because of the trust the team has no him and not because of some dirty politics, the individual is bound to perform well.
Apart from competent individuals, agile methodologies require competent teams as well. Agile teams have the ability to reorganize themselves according to the problem they have at hand, to tackle it efficiently in terms of cost and manpower. For the teams to function as per agility, the members should have strong mutual bonds and respect for each other so that they can communicate freely among themselves. Such teams should have the ability to reach on a consensus about the plan of action to tackle an issue that too in a reasonable amount of time. For instance, there is a change in the customer’s demand for the delivery of a product, changed from some considerable amount of time in future to just near future. The team should have the ability to change its functioning model from prototyping, where they are just figuring out the exact model as to what customer wants to extreme programming where they can deliver some essential features desired by the customer in short duration of time and later keep updating the software. The team should have a fast decision-making capability with no ambiguity as to how to proceed with the work.
Every team requires proper communication and collaboration among the members to function successfully. Communication refers to sending and receiving correct and precise information through proper channels and understanding what is expected. Collaboration, on the other hand, is working together towards a common goal by the use of effective communication.
I believe agile methodologies are an attempt to implement micromanagement. Micromanagement is a scenario where the manager keeps a close watch on the team’s progress, asks about daily progress and what are the future goals and how to go about them and lastly when is the increment due. Micromanagement is not a positive feature according to some developers because they feel that these daily review meetings are deadlines and get might get worked up if they are not able to deliver what they promised at the due date. The managers should show a little understanding when a developer is unable to complete a task rather than becoming judgmental for better functioning of the team and for keeping the individual competitive Agile enforces micromanagement namely through SCRUM (which is a daily progress discussion meeting which lasts around 15-20 mins which makes sure that every individual is on track) and pair programming (where development is carried by two individuals together each keeping a check on the other and as a result coming up with a high-quality code). I support agile methodologies attempt to micromanagement as it is not the manager that is enforcing the micromanagement on a daily basis but it is the team which is doing the same on itself. I have worked on a project which followed the SCRUM methodology when I was working at Cognizant Technology Solutions, back in India. A daily status call used to take place where every individual talked about what they are working on, how they are going about the task and what difficulties they are facing if any, how much time will that task take. During the status call suggestions were given by the SCRUM Master and other members for tackling a problem. Later at the end of the week every team member had to log in the tasks completed by them in log for calculating the amount of effort utilized during a task. The daily SCRUM helped the team members know the progress of every individual and the direction of the project. It was further noticed that daily SCRUM had its disadvantages as well- some team members started fearing the daily SCRUM because they feared that everyone will find out about their weaknesses or their lack of technical knowledge due to the transparency. Even though the micromanagement has a disadvantage I still believe that micromanagement is a positive aspect of the agile approach and in the long run benefits the organization.
Although the agile methodologies focus primarily on delivering a working software to the customer, the stages of design, testing, and planning exist. As agile methodologies deliver the product incrementally, a proper design is made for the set of requirements that have to be delivered at the end of an increment. A good design is made and followed to decrease the cost of implementing the requirements in the later increments. It is generally beneficial to use a factory design while implementation rather than a simple one to predict future changes and accommodation of those changes with ease. Agile methodologies also check the quality of design and every technique does it differently. 2 For instance, Dynamic System Development Methodology calls for a series of prototypes to attack unstable or unknown areas mainly new technology, new business rules or user interface, SCRUM uses intense 15 min daily meeting and comprehensive iteration reviews at the end of a 30-day cycle. Testing in an agile project, unlike plan-driven processes, is not a different stage of software development and goes hand in hand with coding. As the product gets incrementally delivered to the customer, every increment is tested rigorously before it is integrated with the already existing system. Techniques like test-first development occur within the agile model where test cases are designed before the coding is done. Here the test cases are designed from the customer requirement and then coding is done with the objective that all test cases have to be passed. Further, in an agile setting, the testers and the developers work closely as compared to traditional plan-driven approaches. Last but not the least, agile projects carry out weekly planning. This is mainly done as to define how the tasks in a sprint will proceed for successful completion of the sprint. Planning is done as a team cannot just randomly start building the design with no clear demarcation of other teammates work. This might result in code that cannot be integrated together into an application or redundant code.
1 Agile Software Development- People Factor
2 Agile Software Development: The business of innovation