Friday, December 21, 2012

Agile Software Development


Introduction
This article presents Agile Software development - an alternative approach to software project management that is quite different from the traditional models. It promises to bring agility to your software development processes and promotes a new, evolutionary change in how software projects are managed. The article aims at providing its readers a broad level overview on this latest methodology.
What is Agile Software Development?
Agile is basically an alternative approach to the software project management that is quite different from the traditional waterfall model that is mostly practiced by software farms globally. We are now coming across various hot methods like Crystal, Extreme Programming (XP), Scrum, Adaptive Software Development, etc. All of these team up to form the agile software development. Agility is important not only for the software development methodologies, but also concerning any organization. Agility is the keyword for survival of the organizations in the near future.
Agile methods are based on real time communication between the programming team and its customers. The customers normally include project managers, analysts, and actual customers. All of them communicate face-to-face without putting much emphasis on written documentations. This is a key emphasis area for Agile Development and is a point of criticism. The team resides in an arrangement or enclosure wherein they can freely communicate with each other. The enclosure also may contain Quality Assurance Engineers, Graphics Designers and respective managers.
Most of the agile software development methods call for minimizing the risk by developing software in short modular boxes called iterations. Each of these iterations is by itself a mini software project and follows all the standard phases of the software project life cycle, such as project planning, requirement analysis, system design, code generation, testing and documentation. Completion of any iteration is followed by review of the project priorities by the project team.
Looking back in time
Agile development is an effect of the negative reaction against the commonly practiced software development models of the olden days, namely the waterfall model. It started becoming a popular and practical mode of development approach since the mid 1990's. Agile development came into existence due to the fact that theoretical approach of the waterfall model came out to be quite different from the practical methodologies followed by the developers to successfully design and develop any software solution. During initial days of programming, agile development methods have been referred to as “light weight” methods. In the year 2001 the agile community adopted the name “agile methods.” In the past there have been several agile development methods available to the software industry and each of these are having its own significance and importance to its followers and the community is consistently working towards effective utilization of these methods by the software development world.
The Agile Development Standards
Agile development is based on some standards outlined in this section.
Continuous involvement of customer - The need for involvement of an end user throughout the project lifecycle in agile development is very important. An end user has to be made available throughout the project development lifecycle and interact with the developers and help them achieve their project goals. They also need to verbally communicate on a regular basis to make the project lively and free of any bugs arising from misconceptions.
Team members should take important decisions - The project development team should possess enough power to take important decisions in collaboration with the end user (customer). The team members need not always wait for their higher authorities to take important decisions for taking the project ahead. This can be done when absolutely needed and can be avoided in general. The team members can very well take proper decisions in collaboration with the customer contacts that are in collaboration. They should, however, know to manage the customer’s expectations optimally.
Requirement analysis, a continuous process - In traditional models, the requirements are normally analyzed and fixed at the very initial level of the project lifecycle. Whatever the case may be, the emphasis is given to capture as much requirements as possible and to streamline the project scope. Any future changes are normally taken care of as a separate activity under “change request management.” Agile development works on a philosophy that is very much different from traditional software development methodologies.
Agile development methodology can address the evolving requirements over time. How? The time period for any project is kept fixed and the requirements are allowed to come in during the project lifecycle. Therefore, the project team and also the end user (the customer) need to include or remove any requirement keeping in mind the fixed time period. As a result, they may need to adjust this new work with some other comparable work within the project to put up this change.
Project requirements are visual and adequately drawn - Agile project requirements are drawn mostly at high level and are optimal and visual in nature. These requirements are mostly drawn bit by bit and help to develop the software for any specific feature or module. The visual representation of the requirements helps the agile developers to develop the solution closest to accuracy against its actual requirements. The requirements are sufficient in volume so as to provide that much input that is required for developing and testing the feature or module. This also enables reasonable efficiency. The objective behind this approach is to minimize the time taken for secondary activities in the project lifecycle that are always required to take ahead the project, but are certainly not a part of the end product or the solution.
Development produces small, incremental releases with iterations - In traditional software development methodologies the requirements for the whole software are collected at the very beginning, analyzed and then the software is developed with all its components and finally testing is done for the entire solution followed by its release. Agile software development approach supports a different cycle in terms of analysis, development and testing. The agile development projects are produced in separate pieces with small, “incremental releases.” Each of the features in the whole solution is separately treated and each of these features has its own three phases or steps (analysis, development, and testing). Once this feature is developed, the next feature is developed in succession following similar phases. Hence, the methodology enables doing each of these steps for each feature, with one feature at a time.
Recurrent product delivery – Agile development methodology supports recurrent delivery of any software product. It enables the breakup of the product into several modular features and delivers each feature incrementally on a regular basis.
Fullest completion of each feature – Agile development ensures fullest completion of each of its isolated features in terms of analysis, development, testing and release. Only then is the next feature or module in succession taken up. Care is taken to fully complete the functionalities within each feature (a mini project by itself) and then proceed on to the next feature that is another mini project and is in succession.
The 80/20 Rule – The law of distribution and the similarity in distribution curve amongst many things are defined in the Pareto’s law which is also known as the 80/20 rule. The law defines that 20% of the efforts put in can bring out 80% of results. The percentages may vary in various situations, but overall it means that the optimum amount of very important efforts can be identified and put in to bring out the bulk of the desired results. Hence, agile development emphasizes smart development wherein the team focuses on identifying the most important “20%” efforts to bring out the greater part of the results.
Continuous testing – Agile development encourages regular testing throughout the project lifecycle. It does not normally encourage a separate all new testing phase as such. The team does the unit testing exercise while developing the feature in phases. This not only ensures developing software of great quality, but also helps in the iterative, incremental releases of the software. The automated repeatable unit tests ensure that all the modular features are working as per expectations each time while creating a build. Regular builds are created and integration is also done as the development progresses. The primary objective for this approach is to ensure the software to be available in release condition at all times throughout the development cycle.
Collaborative and cooperative development approach – Agile development is strongly based on effective collaboration and cooperation amongst all its team members and also the end users (clients). Agile development focuses on keeping sleek but effective requirements and documentation that needs great collaboration at all times. Requirements need to be clarified in the right time. The team members and the end users should always be updated equally throughout the development to understand and appreciate the status of work in progress and the goals to be attained.
The Agile Development Methods
There are several agile methods currently available out of which few have gained greater importance in real-time practice. We will elaborate on a few of the popular agile methods, such as Scrum, Extreme Programming (XP), Crystal Clear, and DSDM (Dynamic Systems Development Methods). The other methods available are Agile Unified Process (AUP), Agile Modeling, Adaptive Software Development, FDD (Feature Driven Development), and Lean Software Development.
Let us take a look into a few commonly practiced agile methods in the following sections.
Scrum
Scrum development has its inception during 1986 and had the objective to present a highly iterative development methodology. The popular developers behind its successful initiation are Jeff Sutherland, Ken Schwaber, and Mike Beedle.
Scrum has its primary focus on the management part of the software development, dividing the whole development period into small iterations (of thirty days) called "sprints." This helps in administering the process better and also to control the development with daily team meetings. The engineering practices are less important in scrum development. The users, however, can merge the engineering practices of other popular agile methods with the project management aspects of scrum.
There is a Scrum Master who acts as a facilitator in scrum development and removes the obstacles that the team faces while attaining its sprint goals. The scrum development team is generally located in the same place, very well organized and encourages in extensive communication amongst each other regarding the project development aspects. These help in effective error-free progress and help them to attain the sprint goals. Scrum development takes its credit in addressing the fundamentally empirical challenges by appreciating the fact that any software problem is not defined fully during its inception and by maximizing the team’s efforts in rapid delivery and faster response to up-and-coming requirements.
Extreme Programming (XP)
Extreme Programming is said to be the most popular and important of the various agile development methodologies available to date. Extreme Programming owes its inception to the Smalltalk community during the late 1980's. The popular developers behind its successful initiation are Kent Beck and Ward Cunningham who also took up the task of enhancing the XP practices to provide a software development methodology that is people-centric and highly adaptive. Kent Beck authored the popular book on this methodology called "Extreme Programming Explained" which came out in the market during October 1999. The book still provides good references to the followers of this software development practice.
Extreme Programming recommends a set of daily practices for its team members. These practices can be seen as traditional software development practices taken to its highest productivity level. This effort helps in providing greater and faster response to the customers which is in contrast to the traditional methods. It also helps produce software solution of better quality. XP in line with other agile development methods also believes that requirements can come up during any time throughout the project lifecycle (instead of getting defined at the very beginning), and the team has to be highly adaptive to these up-and-coming requirements and make effective this realistic approach through energetic response.
Crystal Clear
One of the great exponents of agile community Alistair Cockburn developed the crystal family of software development approaches meant for teams of different sizes. All of these methods have similar features and properties. Important properties are Frequent Delivery, Reflective Improvement, and Close Communication. Crystal requires lesser discipline as compared to XP and has reduced chance of failure.
Crystal Clear is an important variant of crystal methodologies that is ideal for a team of about 6 to 8 developers located in the same venue and working on light weight systems. It has its emphasis on people and not on processes. Important properties of crystal clear are as follows.
·         Usable Code should be regularly delivered to the users
·         Improvements are insightful
·         Regular effective verbal communication between co-located team members
·         Ease of accessibility to the expert users
Dynamic Systems Development Methods (DSDM)
DSDM is a RAD (Rapid Application Development) based framework that follows a user driven, incremental approach in an iterative development for designing and developing software on time, satisfying all its business needs and strict budget. This agile methodology has its inception at the United Kingdom during the 1990's by DSDM Consortium (a non-profit organization). DSDM is an extension of RAD and it emphasizes information systems projects that are having steep deadlines and strict budgets. DSDM can be integrated to other agile methods in typical cases.
So, should we go agile?
Agile development and its usage belong to a specific group of people who clearly understand its significance. Agile development has its own set of drawbacks and may not be suitable for any type and size of software project, but can be successfully used for reasonably sized projects with a maximum team size of around 100 developers. However, agile development should be taken up by any organization in steps and can be started with a small project that can fall in line with the agile methods. Agile development is also a boon in providing customers who are so collaborative and act as stakeholders in a project development all through, along with the developers. Agile methods are still very young to draw the boundary conditions effectively for a software project. The decision for choosing agile methods should ideally go to the people primarily who are the best ones to decide whether they can suffice to the excellent collaborative project development. If not, it is better not to follow any agile methods as lack of the desire for adapting this development may ruin the project. However, with all its pros and cons, agile development is gaining immense popularity amongst organizations across the globe that believe in simplicity in designing and developing software with great and effective collaboration between the project stakeholders.

No comments:

Post a Comment