The primary objective of Agile methodology is to develop software which is inclined to the ever-changing requirements of the marketplace and customer’s needs. Agile methodology encourages teamwork, accountability, and self-organization. In agile development, change is embraced.
Changes in the marketplace, in the customer needs, and in how the solution will be used are all readily welcomed. This is one of the greatest strengths of agile development. Instead of locking the development team into a set of requirements that are quite likely to be outdated, the agility allows the requirements to change and better still, it prepares the software for that change.
In an article by Bertrand Meyer, he says agile development is a “catalyst for innovation around the world.” Every day software technology is advancing, and in order to keep our software aligned with this advancing technology, we need to innovate. Meyer says our current process of innovation is a “random walk at best, heavy in clumsy process, slow to cycle to new ideas, a waterfall approach.” Coming from a creator of the waterfall methodology, this is a very interesting point. With the inherent flexibility of agile development, and its ability to create and release small useful tools, we are now cycling very quickly to new ideas and are no longer on that “random walk”.
When looking at the importance of Agile development compared to traditional planning, execution, and process-driven methodologies (such as the traditional waterfall methodology), there’s been a shift in the focus within today’s economy. The market is moving from manufactured goods to technology solutions and systems. Technology is the nucleus driving business solutions today, and that technology is constantly changing. To be successful we need to align ourselves with that change, and the technology needs to work on a solution that might not be fully understood at the time of development.
Waterfall methodologies and many other traditional process-driven methods are simply not designed for an environment with such uncertainty. These methods rely on having a complete understanding upfront and working towards that understanding. They are intended to minimize risk by managing it, but there is no way to manage today’s technology-based projects’ inherent risks. Meyer states that “traditional engineering has run out of steam in the face of certain categories of software-related challenges. Freud would have understood: in the unconscious lays the key to the understanding unknown, but we write software in order to take it with us to places that are unknown.” With the need for understanding today’s development challenges, we need a methodology that aligns itself with our understanding that often the problem is not fully understood, and the solution may take us to unknown places.
The Agile method is designed to take the software to unknown places, it’s flexible and the engineers can step back and rethink any part of the software if it’s not taking the solution in the right direction. This is something unattainable with code and fix practices and any process-driven methodologies. Therefore, the solution for today’s development teams lies in agile methodology.
Definition of Agile Methodology
The Agile methodology is a particular approach to undertaking software development that is characterized by the division of tasks into short phases of work or iterations. The primary aim of the methodology is to be flexible and responsive to change, in comparison to traditional project management or development methods. In traditional methods, project plans and tasks are normally set in stone, and attempts to make changes to requirements or design often result in increased project duration and cost.
The frustrating reality is that changes in customer requirements often cause projects to fail or lead to a decrease in customer satisfaction with the end product. Agile represents an approach to software development that is often contrasted with the more traditional waterfall approach. The most well-known difference is that waterfall is more plan-driven and attempts to define all requirements upfront, using a sequential design process. Agile, on the other hand, is more flexible and able to react to changes quickly.
Importance of Agile Methodology in Software Development
Agile methodology is a way of working iteratively and allows projects to be flexible, efficient, and effectively embrace change. It can be applied to various types of projects, especially software development. Compared to the traditional way of software development, agile methodology is easier to adapt to all kinds of project changes.
The traditional way of software development using the waterfall approach is too risky and will easily result in project failure, as it only focuses on delivering the product at the end of the project. This means that in the waterfall approach, if there are some changes in the middle of the project, it will affect the entire project plan, including the timeline, cost, or the final outcome of the project.
However, using agile methodology can reduce the risk of project failure and deliver a better end product, as it can adapt to any kind of project changes and deliver a partial product within a short timeframe, eventually becoming the end product. Because of the flexibility and high chances of project success, agile methodology is now becoming the essential way of doing a project.
Benefits of Agile Methodology
A significant benefit for the customer working with agile methodology is that they will be given rapid access to the latest product developments. This is possible through short time-boxed iterations which provide regular updates to the product status. At the end of each iteration, the team is required to provide working software to the customer.
These regular checkpoints enable the team to make any necessary adjustments to the product to keep it in line with what the customer is after. In comparison with conventional methods, in favor of fast “time to market,” APC Solutions took on a software development project which involved a live website video and audio streaming software. This was a 12-month project using the waterfall methodology. The product was delivered to the customer after 12 months to find that technology changes made throughout the year had made the product idea redundant.
Increased flexibility and adaptability can happen when internal disagreements or issues arise in the organization. Agile allows us to cooperate with our customer and settle on a compromise that everyone can be happy with. Change can provide superior advantage and worth to the customer. In today’s ambiguous and volatile commerce environment, the capability to manage and regulate is a decisive capability. This is one of the mainly cited benefits of working with an Agile methodology. Organizations can make enhanced decisions about a project because of the increased visibility and communication among team members. When development teams partner with business stakeholders while working on changes in requirements, these teams get better alignment of the product vision. The teams are capable of making the right product with elevated competence due to the fact that they know.
Increased Flexibility and Adaptability
Agile methodology is an approach to (most frequently) software development, although it has been used in other fields, which helps teams respond to the unpredictability of building software through incremental, iterative work cadences, known as sprints. Agile methodologies are an alternative to waterfall, or traditional sequential development. Agile development methodologies such as XP, Scrum, Crystal, DSDM, and FDD are unique in the sense that they focus on creating working software on a consistent basis.
The traditional software development methodologies (such as Waterfall Model) have been proved to be too inflexible to effectively address the fast changing needs of companies competing in global markets. It has been found that moving to more flexible methodology life cycles is crucial to software development in the changing world.
Enhanced Collaboration and Communication
Communication being at the forefront of agile methodologies, a development lifecycle can lead to extending this communication locally or worldwide. In which case, development and upkeep of documentation is the best way of allowing communication and post-change analysis. While agile methodology prefers oral communication and face-to-face contact, a large amount of work may go forgotten if the only line of communication was contextual.
High bandwidth methods of communication would be a case at the extreme, such as high-quality video conferencing or teleconferencing. Though still not completely abandoning the preferred methods and allowing the overseas client or team member to feel as though they are part of the involved development team.
Improved communication is essential to agile development. Agile development is geared to help respond to unpredictability through incremental, iterative work. Given that projects and development are made easier through communication, agile methodologies are built around small teams, it is in the best interest to utilize the effectiveness of communication.
Agile development is heavily leaning on efficient communication, more effective than documentation of development teams. Co-location of teams is key to this, as well as keeping the team size small in optimal cases. While it is not necessary to have the team in one building, having everyone in the same building is ideal. This is in part due to the heavy emphasis of constant customer input and collaboration throughout the process. Static from unclear lines of development is removed as the quick and flexible changes in agile approaches can be discussed and agreed on through the team. This in turn provides the right path to be taken since changes can be made in a timely manner.
Faster Time-to-Market
Morriston also talks about the fact that Agile development processes can contribute to faster time-to-market. The time-boxed iterations and emphasis on working software throughout its development lifecycle mean that there are usable features at the end of every iteration. Additionally, the iterative nature of Agile means that teams are capable of exploiting learning to get a product to market faster than with traditional approaches. It is said that companies that are nimble and capable of getting features to market quickly have a competitive advantage, and this is a significant benefit of Agile methods.
This is not to be compared with cowboy coding or hacking together software in an unstructured way. The main difference is that in Agile, feature priority drives schedule, which in turn drives scope. In other words, because time-boxed iterations need to have something demonstrable at the end, the time it takes to get a set of features to market is very predictable. This predictability is often unattainable when the focus is on large releases after long periods of development. Features may end up being cut to meet a deadline, and the resulting product may not be what was originally intended.
Improved Product Quality
One of the most important improvements Agile methods have brought to today’s businesses is the ability to enhance product quality and productivity. Using an Agile method encourages businesses to consider the quality of their product. Teams are encouraged to apply this by conducting testing throughout the project lifecycle and not only at the end of the project. This, in turn, promotes continuous integration and reduces the time taken to uncover defects in the system.
With the short time-boxed iterations and continuous involvement of business representatives, the product is more likely to be aligned with the customer’s wants and needs. This greatly increases the chances of customer satisfaction. Finally, the use of pair programming and more specifically test-driven design ensures code is written to a higher standard and is more likely to be refactored at a later date. All of this serves to increase the productivity and quality of the product.
Agile methods have changed the information technology industry in recent years and have been described as a disruptive innovation. However, the true definition of what Agile is still varies from one author to another. There are key underlying principles such as prioritizing customer requirements over planning, creating small incremental releases, welcoming change, and harnessing self-organizing cross-functional teams to accomplish it. Agile methodologies place importance on leadership, process, and people, while traditional model-based methodologies tend to focus on tools and techniques.
Key Principles of Agile Methodology
The next principle is embracing change. A common misinterpretation of this statement is “Agile is about no documentation and no planning” and that Agile teams can just start coding and things will emerge. The Agile Manifesto actually says “Responding to change over following a plan” so it’s not about abandoning planning and documentation but rather about finding a way to keep them in line with the amount of knowledge that we actually have.
There will be some future events that are very hard to predict (for example, a Euro currency conversion, an acquisition, or a new regulation) and we don’t want to have made big detailed plans and investments based on assumptions that now turn out to be false. Agile plans are more adaptive and evolutionary. In project-to-project comparison for the same type of software, an Agile team might have only 50% of the overall project plan detailed broken down to tasks, but the information will be more accurate because it was done closer to the time of the actual work. A traditional team might have planned 80% of the project in detail but had to revise the plan many times, often making the detailed plans and baselines more of a liability than an asset. Agile is about making the tradeoff between “value lost due to obsolete documentation” and “cost of change”. Requirements will emerge and evolve, but the high cost of formal change processes often means that the documentation and plans stay out of step with the actual requirements. Agile projects work to reduce the cost of change so that the documentation can, in fact, stay in line with the requirements.
Customer collaboration is the first lever of Agile methodology. The “Big Requirements Up Front” (BRUF) is most often in the form of a “fixed price” bid or an expensive and bloated Statement of Work (SOW). The SOW or contract defines exactly “what” will be built and “how” the project will be managed. The assumption is that the customer can specify everything up front and that change will be a bad thing. This may suit the service provider but is a bad deal for the customer – instead, we want to maximize the business value that the customer receives from their IT investment. With BRUF, the customer doesn’t get much visible functionality for their dollar until the project is very near the end, when it’s too late for anything but an inflated change request to make it work right.
Customer Collaboration over Contract Negotiation
The need to keep thinking and excuse the pun “planning ahead” has become a stale ideology for project development. While planning is important, sticking to a rigid plan without keeping in mind the situations that may arise later will be a problem. This is a universal concept and can be explained by a simple analogy.
If a family is going on holiday, they will obviously have a plan regarding the places that they will visit and stay. But in the event that there is some form of natural disaster or the vehicle breaks down, the original plan is no longer valid and a change in plan will be necessary. This is the same for software development. Any software project is subject to unexpected situations, and if there is no alternate plan, it may cause an increase in cost, the need to rush the project, and in the worst-case scenario, abandonment of the project.
Any situation that can cause a negative impact will require a change in the plan. At this point in time, the best thing to do is to evaluate the impact of the situation and the effect that the change in plan will cause. The decision-making at this stage will benefit more from stakeholder involvement. The final decision would be a change in the plan that is most fitting to the situation and can minimize the negative impact. Specially relevant to the Agile method is the ability to make and evaluate the change of plan for the future, and the earlier mentioned points will also be revisited in the context of customer involvement.
This is because the completion of any project, regardless of its size or nature, heavily depends on teamwork and problem-solving abilities. During the development of a software project, a problem may arise in which solutions may involve a change in the logic or some of the functions in certain modules of the software. The change in solution is something that would usually not be covered within the contract; it is somewhat of an informal agreement between the developers. But if the clients are involved in this discussion, they may be able to provide a solution more relevant to the specific module of the software and thereby improving the logic in terms of function and efficiency.
So, to cut the long story short, the ability to find a sound solution to a problem is far more effective with discussions between the developers and the client because the client is the one that knows the needs of their customers. The contract contains some specs and a promise to deliver a fully functioning product, but the real aim is to meet the satisfaction of the end users.
In the traditional software development methods like the waterfall model, the first thing to do before starting any project is to establish a contract. This is effectively explained in the statement “Prioritize customer. Negotiate contract after.” But Agile methodology takes a different approach. It states that the collaborative abilities shown by the team members are much more important when compared with the contract agreed upon by the parties involved.
The next four key principles in Agile methodology are particularly designed to target the reduction of making mistakes, cost, and risk. The discussion of each key principle will provide a more comprehensive view from the Agile perspective.
Iterative and Incremental Development
Finally, the method of iterative and incremental development is seen to be the most essential foundational aspect of agile methodology. This idea allows for a project to develop over time through growth and improvement so that tight focusing is not necessary. This is implemented through constant revisions and taking small steps in the right direction, in comparison to traditional methods such as the waterfall method which focus on completing one stage fully before moving to the next, and do not allow for changes or revisions to be made.
The findings in the techniques are then verified and validated through the testing and testing at the end of every stage. The focus of high visibility, with the availability of a draft and improvements on it at all times for the customer has a high level of attraction as well as being cost effective should the project be terminated at any point. This means iterations may consist of scaling the project down if it does not move in the right direction or if the client decides it is not worth further investment. Iterations should rely on the feedback from the customer and self evaluate about development of current and future iterations. This discussion with plan adjustments should be continuous through the life of the project.
Self-Organizing and Cross-Functional Teams
Cross-functional teams are another key element of Agile methodology. In non-agile development, it is often the case that people of similar skill sets are grouped together. This can lead to problems when one group has a dependency on another. With different skill sets within the group, these dependencies are non-issues, as there will always be someone who can perform a different task. This is favorable in that it puts the onus on the team to get the task done, and the way they select should be the way that they feel is best. This can lead to out-of-the-box type thinking and innovative results.
Self-organizing teams produce the best architectures, designs, and work environments. Motivated individuals are given the environment and support they need, and are trusted to get the job done. This is a key element of the Agile methodology. Trust is a driving factor. If the team feels they are not trusted, they are not going to perform to the best of their ability in fear of getting into trouble. A motivated individual who believes in what they are doing will produce the best possible results. This, in turn, leads to continuous improvement of team processes to get the work done more efficiently.
One of the key principles of Agile Methodology is self-organizing teams. Comparing with traditional approach of selecting people to perform a certain task and monitor their performance, Agile method propagates the idea of entrusting the responsibility to perform a certain task to the team who will then best decide the means to get it done. Management does not tell the team what to do, but the team tells the management what they are going to do. Traditional development often sees the team being given strict instructions on how to do something and the tools to use. This does not inspire creativity or best results, as the team may know a better way to do the task, or there may be a better tool available.
Implementing Agile Methodology
Agile methodology is a process approach to software development that successfully builds complex software systems. The Agile Alliance provides detailed information on the history of Agile methodology. The Scrum framework and Kanban method come under the Agile Alliance.
Scrum Framework
Scrum framework is mostly used by the company to manage a process for the increasing and complex product and applying of knowledge. Scrum is best used in the project with the increasing product such as the system or software development project. Scrum is not a method or a technique, but to taking a person that already uses a method or a technique to build a product in to the best they can do.
Scrum as a framework, there are some predefined roles, predefined events or artifacts, and also defined rules. Scrum roles are using some functional in to the people involved in the project. The main person in the project that have the largest role is a product owner, product owner is responsible for the product or the result of the project, he will ensure the product that develop by the team meet the needs and the requirement of the customer.
Next is the Scrum master, Scrum master is responsible for the correctness of the scrum that used by the team, he make sure the Scrum is understand by the team, and the predefined roles, events, and rules are used properly. If there are some problem in the implement of the scrum, he must facilitate the solution. Then the team, team is a group of people that do the project to make the product. Any team member has commitment to the project and must be accountable in the result of the project. This roles are the main part of the framework, but it doesn’t mean that the other predefined event or artifacts and rules are less important. Any the role have the equal importance to bring the project to the success.
Kanban Method
The core practice of Kanban methodology is a visual board that represents the project. The board consists of several columns which give information about the flow of the project. A task is represented by a card that is placed onto the board. The card, in this case, represents a task in the to-do list before finally being assigned to a developer. The task on the card will be described briefly and also contain information about the person in charge of the task. The flow of the project is illustrated by the movement of the card. The developer takes a card from the to-do list and then places it into the next column, which is “doing”.
When the task is finished, the card is placed into the testing column or just pulled into the tester, whose information could be seen on the card. This activity is run continuously until there are no more tasks available. This simple project visualization is considered an effective tool to see the progress of the project. Comparing to Scrum, Kanban is more adaptive. It takes a process of iteration but also allows ongoing changes to date without overhauling the existing process. This Kanban characteristic is suitable for companies that don’t want a drastic change in their process. Kanban is change-friendly and redistributes the work more evenly to eliminate silos and multitasking, which consume a lot of idle development time.
Continuous Integration and Continuous Delivery
Both practices don’t require changing the entire process at once. Steps can be taken to introduce modern practices to the existing process. These practices are low risk, and they can be tried and used only when they are considered useful.
Continuous Delivery (CD) is the next step to CI. The objective of CD is to make sure the software can be released at any time. This task is done by continuously putting the software into a production-like environment and verifying that it is ready for release. If any last-minute cares are required to release the software, and these cares are done immediately, the software will be more reliable. When the software is always ready for release, the distance to release is reduced dramatically. This leads to smaller transaction costs. The software is released often, and it makes it easier to respond to market needs and cope with the competition. The deployment should be made easy, and automation may also be utilized here. Consider the deployment as a part of the process, and it will also be enhanced.
Continuous Integration (CI) practice focuses on preparing a working release candidate. In ancient days, developers were waiting for a long time to build the code and then test it. It was a hassle some process. In modern day, this problem is solved by CI. Throughout the development phase, the developers integrate the code into a shared repository several times using version control. Automated tools are used to compile all the code. If automation is successful, then developers can proceed with their work to the next task. The integration is verified by creating an executable that verifies the correct working order of the code. The executable tests are essential CI best practices. If any build or test fails, then developers should stop adding more features, fix the problematic code, and proceed. Build results and automated test results need to be visible to everyone. This practice ensures that each code integrates properly and the system builds successfully. It will reduce the time spent on bug fixing because the code is already verified when it’s integrated.
Agile Tools and Techniques
Agile development is a concept, a methodology to be exact. Agile tools and techniques are used to aid its practices. Some popular Agile tools are:
- Rally Tool,
- Jira Tool,
- QA Touch,
- Microsoft TFS.
These tools might differ in features and price, but they all help in managing the product development lifecycle. They are relied upon if the core practices have been put in place. Agile methodologies have proven to increase success in software development by helping users build the right product. With strong highly visible requirements, the teams can stay focused on building the system their customers actually want.
Moving to an Agile development process has reduced several issues that have been deeply rooted in the traditional development process. Failed projects and going over budget have always been a common issue in software development. By having short iterations of 2-4 weeks and reliable complex tracking, Agile is proven to reduce overall risk. And it has been viewed as the fix a chaotic development process. Iterations allow for the bugs and changes to roll up into a portfolio, complex situations can be tracked and managed more accurately.
Traditional bug tracking is seen as more of a fire fighting approach. It does little to stop the chaos and confusion of a disorganised development process. Coming from a different angle, Agile bug tracking provides methods to prevent bugs from being created in the first place. Focusing on the issues, which have higher severity and are critical to the success of the project, Agile teams can produce a higher quality of software by preventing re-occurrence of said issues in the future. On the whole, Agile tools and techniques have provided an efficient and structured approach to software development and given a legacy of better management.
Recap of Agile Methodology Benefits
This white paper has shown that agile methodologies are essential for today’s development teams. They provide a flexible and adaptable approach to developing software and enhance the quality and frequency of releases. Using an iterative approach to software development, agile methodologies break projects into small increments that minimize the amount of up-front planning and design. This contrasts with traditional methods such as the waterfall model, which tend to plan everything before moving onto the next stage of a project. The benefits of this are that it’s easier to identify issues and risks later on in a project lifecycle, and it is easier to change requirements. Iterative development makes it faster to build a small part of a system and to change the direction of a project at a later stage.
Future Trends and Challenges in Agile Development
Another trend that is expected to occur is the increased use of off-shore development coupled with the use of Agile methods in various locations. This trend is already becoming apparent as more off-shore companies are achieving the capability to work in an Agile manner, and thus the use of Agile methods becomes a viable option. There are potential benefits to this situation such as the ability to save money and resources and the increased diversity of working in a global environment. However, there are also various obstacles and risks. The nature of off-shore work means that there may be disparities in time and location which can hinder communication and the ability to coordinate within teams. This in turn can lead to various inefficiencies and in the worst case scenarios, the project may fail. Global agility is a complex issue which will require time to assess as to whether it is a viable option for many companies.
There are several trends that are expected to emerge in the future. One of the more significant trends is the use of Agile methods beyond software development. The potential for Agile methods to be used in not only the software industry but in a wide spectrum of industries is a movement that is being closely watched. To this end, several members of the Agile community authored the Agile Manifesto to establish a concrete vision of Agile methods outside of software development. One of the signatories, Jim Highsmith, is the coauthor of the Agile Software Development Manifesto. Highsmith is also the director of the Agile Alliance and is instrumental in the attempt to push Agile methods to the next level. This notion of moving towards Agile as a universal method and not just a software development method is enticing but the direction it will take is unknown.
Though the Agile movement is broader and deeper than the methodology covered here, understanding the fundamentals of Agile software development puts the manager in a much stronger position to advocate and implement it. Without the foundation of a true Agile methodology, you are not in a position to even understand, let alone practice the finer points of Agile project management. Adopting a new way of doing things is never easy. For a typical project manager, tied up in the vast and varied conventions of a traditional software development life cycle, it can be unbearably hard to let go and embrace process change.
This is doubly true when the benefits of that change are not immediately clear and quantifiable. We’ve all heard about projects that were “planning to start with an iteration or two of learning the Agile thing but business pressures to get to the ‘meat’ of the project prevented it and we never got around to it”.
Without a sound methodology to drive the sprint’s practices and a well-oiled feedback loop to drive continuous improvement, Agile can degenerate into “developers hacking around aimlessly” and “no discipline chaotic cowboy programming” rites of passage that many a software development movement has taken before drowning in the waters of over avoidance of the things it originally set out to change. So how should someone accustomed to a more traditional software development approach get started with an Agile methodology and what steps can be taken to ease the transition? The answer is deceptively simple: start with an open mind and a willingness to learn.
Agile is founded on an adaptive and iterative approach to project management, designed to help teams deliver higher value to their customers. If you do not believe that this is occurring when you compare Agile to your current practices, and then it is you who can most benefit from Agile and it is your project that needs to try it. If you are managing a software team but don’t consider yourself a project manager, working to advance further in the eXtreme Programming methodology could be the key to changing that mindset.
With respect to specific practices, the best source of guidance for getting started will be a passionate Agile coach. An often overlooked, but essential first step is to know exactly what kind of software it is that you are trying to deliver to your customer and to just what extent you can define that now, knowing that it can change later. This understanding will dictate where and how to best apply the manifold Agile practices and approaches and is vital to measurements of success and continuous improvement.