In case of software engineering, the software development takes a major chunk of the whole process. While Software development itself means dividing the whole development into multiple phases such as designing, product management, project management etc., organizations across the world follow various software development methodologies for successful project management.
Various methodologies such as Agile methodologies, Waterfall model, DevOps deployment, Rapid application development etc. used by different organizations and all of them have their own share of pros and cons. However it’s the Agile software development methodology, which is widely used across the globe due to its iterative development approach.
Before we understand what an agile methodology is, let’s have a look at the conventional Waterfall model. In case of waterfall model, the whole development process is done in a more sequential manner where the project is divided into phases. At the initial phases, requirements are defined and then the building phase comes. Once the building process is over, product moves to testing phase and then deployment.
While the waterfall model allows ample scope for requirement as well as project scope changes during the initial requirement analysis, it isn’t flexible about importing the changes in the later phases. Similarly, as clients are not that involved during building process, when testing phase starts and unfortunately if some serious bugs are found, sometimes the whole process needs to start again from the beginning.
Mostly to avoid all these issues faced in waterfall model, organizations started approaching the Agile model. In case of Agile, the whole process is done in a more iterative manner where the whole project is divided into different sprints. Agile allows constant and better client interaction and involvement and is very much flexible with requirement changes at any stage.
While Waterfall focuses majorly on product completion, Agile majorly focus on customer engagement and satisfaction. Instead of focusing on phases, agile focuses on small releases sprint wise and gives high priority to client feedback. Unlike waterfall model, where all processes are divided into phases and one phase is followed after another, in case of Agile, all the processes are iterative and are repeated in every sprint.
For example, while in case of waterfall model, Design phase is followed by Development phase and which is again followed by Testing phase, in case of Agile, every sprint comprises of a design process followed by development and then testing. User acceptance is performed at the end of every sprint. This enables enhanced and effective team interaction and more client involvement in the project. Unlike waterfall model, where testing is done once development phase is finished, developers and testers work together in case of agile.
While Agile altogether can be defined as a software development approach with sets of ideas and principles of its own or more of a manifesto, there are different type of models through which it can be implemented in a real time development process. While the core ideas of agile is visible in all of these methodologies, it’s the way of execution and point of focus that differentiate one methodology from another. Let’s have a look at different types of agile processes −
One of the widely known and followed agile types, Scrum process usually is followed in a small team. It majorly focuses on managing the process in a development team. It uses a scrum board and divides the whole development process into sprints. While the duration of the sprint may vary between 2 weeks to 1 month, each of them is defined by analysis, development as well as user acceptance.
Scrum also focuses on team interaction as well as effective client involvement. There are different roles that people play in a scrum team, such as −
Scrum Master − The Scrum master’s responsibility is to set up the meeting, team formation and overall managing of the whole sprint wise development. He/ she also takes care of any kind of hurdle faced during the development process.
Product owner − The product owner is responsible for creating and maintaining the backlog, which is a repository or dashboard containing all the developmental plans or requirement for the particular sprint. The product owner also assigns and manages the requirements based on their priority order in each sprint.
Scrum team − The development team responsible for development or completion of the tasks and successful execution of each of the sprints.
For each sprint, the product backlog is prepared by the product owner which comprises of requirements or tasks and user stories for that particular sprint. Once the tasks are selected for that sprint backlog, the development team works on those tasks and executes them as a product sprint wise. The scrum master manages the whole sprint process and takes care of the smooth execution of plan.
Everyday there is a small meeting of around 15 mins, called the daily Scrum or stand up meeting, where the scrum master gets the status update regarding the product backlog and tries to find out if there is any blockage for further action. Some non-functional testing types include load testing, compatibility testing, usability testing, scalability testing and so on.
The Kanban methodology is somehow similar to Scrum. Developed by Taiichi Ohno, it is derived from a Japanese word meaning an instruction card which gets followed during the production cycle of a product. It is more of a visual methodology which is quite dependent on its Kanban Board similar to a Scrum board, which contains the complete workflow schedule of the development process.
Unlike Scrum, where only the sprint tasks are added to the board, all the tasks related to the production schedule are added into the Kanban board in form of cards. Typically the tasks are divided into 3 columns such as Completed tasks, To-do tasks, ongoing tasks. Unlike Scrum, task completion based on priority is optional in Kanban and it can contain all the tasks related to the whole developmental cycle at one place.
Extreme Programming or simply called as XP prioritizes customer satisfaction over anything else. Developed by Kent Beck, XP requires higher level of involvement from both Client as well as developers. Development cases where there is frequent changes in customer requirement can opt for XP as it is flexible regarding changes at any time of the production.
It focuses on short deliveries with checkpoints all over the project in order to analyze if there is any changes in requirement and act accordingly. The small deliveries and iterative development cycles happen in a more confusing manner without any clear picture. However it makes sense once the whole development is completed. XP is largely dependent on its developer team’s ability to coordinate. There are 5 phases in Extreme programming, which are −
The initial phase where clients and the developers meet and discuss about the requirement and scope of the development. Based on the client input, developer team prepare short iterative user stories or development cycles for the full development as a whole. Based on the stories created, duration and cost of the project is defined.
Here all the user stories are broken down into smaller tasks and further analysis is done regarding the execution. Even development standards such as class and method names, architecture and formats etc. are planned during designing. Test cases are concurrently prepared for those iterative tasks. For probable problems even contingency plans as well as solutions are discussed.
The most important phase where the development based on the planning takes place which include coding based on requirement and simultaneous documentation for updating customer regarding the present status. Coding standards and architectures defined during designing are properly followed with a strictly 40 hours work a week follow up.
Once the coding is done, user acceptance testing is started. XP integrates testing during the coding phase itself for testing and development to run simultaneously. Based on the test results, bugs are eliminated and then the product goes through customer acceptance testing which is based on the customer requirements. Once the testing is passed, the product along with the test result is then delivered to the customer.
Here, once the product is delivered, the team awaits for customer as well as manager feedback. Based on the feedback, they again follow the same planning-coding-testing iteration till customer acceptance test is passed. The team also provide technical support during production in case of further issue arises.
Crystal Methodology is more of a generic term and constitutes of multiple agile methodology types under it. Based on Crystal methodology, different methodology frameworks should be opted based on terms like Team size, criticality of the project, project priority etc.
Different types of Crystal methodology types are −
Crystal Clear − constitutes of less than 8 team members
Crystal Yellow − constitutes of 10 to 20 team members
Crystal Orange − constitutes of 20 to 50 team members
Crystal Red − constitutes of 50 to 100 team members
Similar to other Agile methodologies, Crystal methodology also starts with planning where tasks based on customer requirement and feasibility analysis are defined. Then comes the actual development cycle. Crystal delivery also advocates quick and short deliveries. Around 2 or more delivery cycles are planned throughout the process and simultaneous testing is integrated. At the end of testing, product along with the test results are delivered. After the development, the team works on customer feedbacks as well as production support.
While Lean itself is a separate methodology than Agile, based on its priciples and working mechanism, it is also considered a agile type. Developed at Toyota, Lean methodology focuses on values, principles and better coding standard and practices. It’s major focus is to accelerate development at less production cost. There are basically 7 principles of Lean methodology, which are −
Deleting everything that has no use in the customer requirement.
Encouraging quality development with integrity and discipline.
Documenting the whole development for knowledge creation.
Not to start planning and designing without having a complete idea regarding the customer requirement.
Focusing on faster delivery to client.
Focus on optimal code with bug and error removal.
Respecting, motivating and empowering the team.
The Feature driven development methodology or FDD is dependent and prioritizes its developers, as its more design and development oriented. Similar to other agile methodologies, it focuses on multiple small development cycles where the focus is strictly designing, coding and analysis.
So based on the feature requirements, design and development cycles are planned and at the end of each cycle, unit testing and code inspection is performed. It focuses more on rigorous documentation and planning. Once the feature list is well documented and understood, team starts working on development.
Dynamic Systems Development Method or DSDM is a rapid action development (RAD) model where the emphasis is more on development rather than planning and designing. DSDM was culminated based on the need of a common RAD framework. While the team is provided with a lots of responsibility and are involved actively, all the developmental works are flexible to change and can be reversed in case of requirement changes.
Similar to other Agile methodologies, DSDM also focuses on better team involvement and interaction, optimal product delivery in iterative development cycles, customer satisfaction and frequent deliveries.
While Agile itself is more of an ideology or manifesto, there are different form of implementation of the same as explained above. However, one look at those methodologies and one can figure out that all of them have a common skeleton or some basic ideas over which all those methodologies are based on. Based on the Agile manifesto, there are a total of 12 principles or guideline which all the agile methodologies standby. Which are −
Agile promotes early and continuous delivery of valuable software. That means while customer satisfaction is one of the major focus in Agile, clients always look for faster delivery and early or on time delivery is a way to keep your customers happy as at the end of the day, they mainly care about the end product rather than the overall process.
Being flexible about change at any point of development. One of agile’s primary focus is customer satisfaction and agile is all about customer’s input and involvement throughout the process including integrating requirement changes at any point of time during the development.
Working on frequent and short deliveries throughout the development process. Those deliveries can be weekly or monthly based depending upon the cycle/ sprint duration in order to keep the client updated periodically regarding present status of development.
Agile promotes transparency between business people and developers and requires them to work together which helps in better coordination, risk management as well as understanding of the product development flow both technically as well as from a business point of view.
Agile advocates for motivating individuals in the team. By providing a better productive environment and providing them with all the support, motivation and respect, there will be a team that is motivated and trust each other which is highly effective in getting better productivity.
While technical advancement has gifted us with many alternative ways to communicate, agile believes in face to face communication as the most effective way to communicate between and to development team.
Agile focuses on through planning and designing in order to get a clear understanding of the user requirement. Agile motivates continuous attention towards effective designing and technical excellence through following optimal code standard. It can be done through regular code inspection on technical reviews and refactoring based on the reviews at regular intervals.
Agile promotes sustainable development. The developers, users and sponsors should work together in order to ship out delivery at a constant pace. As requirement changes as well as blockages during the development process are bound to happen, the whole team must work together so that the delivery process is followed indefinitely.
Working software is the primary measure of progress. In simple terms, none of the planning, designing or overall development process matters if the end product is not in working condition. The properly working end software product is what the success of an agile process depends on.
Simplicity—the art of maximizing the amount of work not done—is essential. In simple terms, to extract maximum result with less hard work. Agile promotes removing unnecessary tasks and prioritizing activities can have maximum impact with less and effective work done.
The best architectures, requirements, and designs emerge from self-organizing teams. Agile advocates encouraging and appreciating motivated individuals in a team, who are passionate about the whole development process, take ownership of their tasks and share ideas among each other through effective communication. This results in having a team of motivated and highly valuable team players with a sense of ownership working together to provide better productivity.
At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly. There is always a scope for change and improvement. Agile promotes team members should focus on self –improvement. They should do regular analysis and work on improving the overall delivery or the development process.
Agile methodology was born out of the 90’s technical pitfalls. The agile manifesto is developed keeping a healthy development environment and a happy customer in mind. Nothing is perfect and there are still issues faced by people even in agile process. However, in a constant changing technically competitive world, we can still hope for constant improvement and changes in agile’s manifesto for better development experience.