In developing a software product, every technology company follow a specific software development methodology. This allow companies to deliver products faster and with great quality. In the early days, companies used a methodology known as the waterfall methodology and this was very easy to understand and use, but had many drawbacks. As the demand for software solutions started growing over the years, the complexity of the products to be developed increased. Clients started requesting more customized solutions and technology companies started getting request for larger projects. Waterfall method was not equipped to manage large and complex projects where change requests were eminent. Companies needed a more effective method of development and as a result, agile software development methodology was born.
Agile revolutionized the way technology companies plan, develop, test and release software product. Through agile method, companies are able to deliver the right product with frequent delivery of small chunks of functionality and improving the product through constant customer feedback. This method eliminated the challenges faced by the waterfall method of delivering large projects in long periods of time without seeking customer feedback until the end of development and resulting in the delivery of wrong requirements. Agile development evolved over the years to become the accepted way to develop software.
But, what actually is agile software development? Why are companies having great success in following this method? How should it be practiced and how is it different from other software development methodologies?
Why do we need agile?
Before the introduction of agile, companies followed the waterfall method, which is also known as the linear sequential method. In waterfall, each phase of a project had to be completed before the next phase can begin with no overlap between the phases. The outcome of one phase acted as the input for the next phase sequentially. The waterfall methodology included 6 phases. Requirement analysis, system design, implementation, testing, deployment and maintenance.
All the phases in this method are cascaded to each other in which progress is seen as flowing steadily downwards. Hence the name “waterfall”. Every phase would have its own set of goals and the next phase would start only after those defined set of goals are met.
To understand the process more clearly, let’s take for example an e-commerce website. An e-commerce website can have a number of features including, product catalog, shopping cart, wish list and etc. In waterfall, it doesn’t matter how many services this application has, because it will be developed as one whole application.
In the beginning, all the needed requirements for the e-commerce website would be gathered. The logical design and the physical design would be completed. And then the actual system would be developed, tested and deployed. Customer is not able to go through the website, until the website is deployed. By this time, if the customer need any changes done, it becomes difficult to implement the changes required. Along with this, there were many other drawbacks to the waterfall method, which included;
Disadvantages of the Waterfall Methodology
Client often found it difficult to address all the requirements at the initial stage of the project. And thus they fully appreciated what’s needed only when the project was completed. It then became too late to make any changes.
Waterfall was not desirable for complex projects where requirements change frequently.
Testing is conducted quiet late in the development process
Not a suitable method for long and ongoing projects
Adjusting the scope during the software development life cycle can end a project
This method was fine until 2000, 2002. But, as the software being developed got more and more complicated, companies needed a better approach to software development. A new process to ensure projects are completed more efficiently on time and with quality. This is when the agile was introduced in 2001. To mitigate all the setbacks posed by the waterfall methodology.
What is Agile software development?
The word “Agile” represented adaptiveness and responsive to change which is what was needed at the time. In fact, agile cannot be defined as a methodology. It’s a framework that provide guidance on how to choose methods and procedures that would work best for your team. According to the agile manifesto, there are 4 key values 12 principles of agile. These values and principles don’t advocate how your team should work. Instead, agile help your team think and interact in ways that achieve agility. A methodology is specific and tells you exactly what to do. Instead, agile gives you values and principles that your team can adapt to.
4 key values of Agile
Individuals and interactions over processes and tools
Agile development puts emphasis on teamwork and communication over processes and tools. People are the most important aspect of software development. Therefore, interaction between the team and the customer is vital to the success of a project. Processes and tools are an essential part of development. However, making great software depends much on great communication and teamwork.
Working software over comprehensive documentation
Before Agile, huge amount of time was spent on documenting the requirements up front. This lead to huge delays in the development process and requirements being missed out. While agile does not completely eliminate documentation. It streamlines it in a way that only the needed information are captured for the developers to do the work. This is done through a requirement documentation know as user stories. The main goal of agile was to offer business benefits to customers rather than extensive documentation.
Customer collaboration over contract negotiation
Agile is all about developing the software as per the requirements of the customers. Therefore, agile focuses more on collaboration between the customer and the team to work out the details of the project. Customer is involved in every stage, from start to end instead of only at the beginning and end. By listening and constantly getting feedback allow the development team to build the software exact as per the customer requirements.
Responding to change over following a plan
Early development methods such as the waterfall methodology regarded change requests as expensive, time-consuming and unnecessary. Agile eliminates this idea and rather than avoiding changes, agile welcomes changes. Through short iterations in the agile cycle, the team is able to easily make changes based on the customer feedback. Agile consider change as a way to improve the project and offer additional value to the business.
12 principles of Agile
“Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.”
“Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage.”
“Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.”
“Business people and developers must work together daily throughout the project.”
“Build projects around motivated individuals. Give them the environment and support they need and trust them to get the job done.”
“The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.”
“Working software is the primary measure of progress.
Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.”
“Continuous attention to technical excellence and good design enhances agility.”
“Simplicity–the art of maximizing the amount of work not done–is essential.”
“The best architectures, requirements, and designs emerge from self-organizing teams.”
“At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly.”
The 4 key values and 12 principles is what agile is based on and why it exists today. Its customer centered, promotes rapid deployment, more engaging and more efficient. While agile is not a methodology, there are number of methodologies that follow agile. Some of the methodologies that follow agile include, Scrum (the most commonly used software development methodology), Extreme Programming (XP), Adaptive Software Development (ASD), Feature Driven Development (FDD), Kanban, Behavior Driven Development (BDD) and few others. These methodologies provide a specific method of development and will be explored in a different article.
The agile software development cycle
Centered on the idea of iterative development, agile introduced releases and iterations, where projects are broke down into small chunks and delivered to the customer at the end of each iteration. The agile method is broken down into 6 stages. Plan, design, develop, test, deploy and review.
The first part of the project is the planning phase. You define all the needed features for the software, prioritize and then break them down into small chunks of services. They are then allocated to iteration which may have a duration of 2 to 4 weeks. During the second stage, the requirements are documented using user stories, modelling diagrams are designed along with the UI/UX of the system. The third phase is where the actual coding of the software happens. The features included in the iteration are developed in this phase. In the fourth stage, the testing of the developed features are conducted. Once the testing is complete, the developed features are deployed to obtain customer feedback in the fifth stage.
In the final stage, the iteration is reviews, customer feedback is gather and the developed feature set is deployed to the production environment. The same process starts again in the next iteration but this time, the client changes are incorporated in to the iteration.
An example of the use of Agile software development method
To understand the process more clearly, let’s consider our previous example of an e-commerce website. An e-commerce website might have the basic features such as sign in, sign up, product catalog, shopping cart, wish list, checkout and etc. For the first iteration, the sign in and sign up features are included and during the planning process, the team decides on the durations for each task. In the second phase, the requirements for the sign in and sign up features are documented using user stories, UML diagrams are created, wireframes and designed along with the UI/UX of the 2 features. In the development phase, both the back end and the front end development happens and during testing, both of these features are tested against test cases or whatever the testing method the company follows.
At the end of the development and testing period, the developed features are deployed to seek user feedback. After deployment, the customer provides his feedback on the update, changes are documented, and the progress of the iteration reviewed and the update is uploaded to production.
At the end of the iteration, the next iteration would begin. The same process happens again but this time, the team is starting the iteration with feedback from the customer of what they developed. So, they are able to incorporate and changes requested by the customer during the previous iteration in to the next iteration or any iteration after. But the main point here is that the team now has feedback on how to improve the developed features according to customer expectations. This is the one of the main point that agile approach provides.
What are the advantages of Agile?
Now that we have covered what agile is and how it works, let’s look at some more advantages agile brings to the table.
Promotes rapid development
Because the team is developing the system in small chunks, they are able to concentrate on few features at a time. This allow the team to quickly identify problems and derive solutions to deliver the end product at a much faster rate.
Enable strong communication
Unlike previous software development methodologies, daily interactions are required between the team and the customer. This constant communication enable the team to cover all the requirements of the customer more easily.
The agile method is all about the customer. Delivering what the customer need. Because of that, there’s significant dependency on the customer. From the start of the project till the end. Customers are always able to keep track of the progress to ensure their ideal product is developed.
Changes are easy
At the end of every iteration, customer feedback is acquired and based on that, if the customer requests any changes, they can be easily implemented even in later phases of development.
End goal is flexible
Customer may not have everything planned out at the start of the project, in terms of the services to be included. However, with Agile, as development progresses, the customer is able to see the end goal more clearly and develop a software as envisioned.
Agile method is indeed and exciting approach to software development and there are number of development methodologies based on agile principle. However, organization must not confuse agile method as a methodology but choose the best methodology under agile that suits your team. We are Alofa Techlabs have been developing software products for over 6 years using agile. More specifically the Scrum methodology, which is the most used methodology by technology companies. By following scrum, we are able to deliver products faster, improved quality and most importantly, deliver software that meet customer expectations.
Get in touch with the Alofa team to start developing your digital solution.
Thanks for your blog, nice to read. Do not stop.