Our team has been using Agile for offshore development for over a decade. We believe it is the principles and the practices of Agile that have helped us to continuously meet and exceed customer expectations. We have been using a combination of several Agile methods, most notably Scrum, a project management approach that focuses on transparency, inspection, and adaptation, and Extreme Programming, a methodology that emphasizes engineering best practices. If you are considering giving Agile a try with an outsourcing partner, First Line has the expertise and the experience to help you succeed.
Here are just some of the improvements you can expect from implementing an Agile process:
Some of the Agile practices directly impact software quality. For example, Test-Driven Development (TDD) can significantly decrease the number of defects, especially on larger projects (studies have shown defect rate reductions at factors of up to 4x and more). Continuous Integration is another practice that significantly reduces risk of low quality. By requiring that an application is rebuilt and tested each time a change is made to the code base, it makes it easy to isolate and correct the problem when newly submitted code breaks the build. Pair Programming makes the code more likely to be cleaner and error-free (improving design quality as well) by putting an extra set of eyes on the code and enforcing a continuous ongoing review process. The principle of simple design and the practice of ongoing refactoring keep the code clean and easy to maintain and enhance.
Lower cost of change
The traditional (waterfall) approach treats design as a separate activity that is completed upfront, which naturally makes it resistant to change. However, in the majority of cases, attempting to capture every possible requirement upfront, and then predict and plan the entire project in detail is not very realistic. The market changes so quickly today that requirements are obsolete pretty much as soon as they are written down. In order to stay ahead of the competition, companies need to be highly adaptive, and so do their applications and software products. Agile is designed to keep the cost of change low throughout the project by using a style of planning where long-term plans are kept fluid and high-level, and the only detailed and stable plans are short-term plans for a single iteration. This prevents the cost of change from growing exponentially as the project moves forward, keeping it relatively flat.
Ongoing customer involvement in defining and refining user stories, the team’s explicit commitments on scope for every iteration, and frequent deliverables’ review by the customer reduces the risk that customer’s wishes will exceed what the team can deliver or that developers will misinterpret the requirements or add unnecessary features. By continuously tracking team velocity, Agile methods help fight unrealistic schedules. Agile also enables teams to address high-risk items (features that involve designs, architectures, frameworks, or algorithms that are new to the team, or are otherwise risky) early in the project. If a high-risk feature causes issues, developers still have time to react and work around it, which minimizes the overall project risk. The practice of collective code ownership helps minimize the risks of individual developers leaving or becoming otherwise unavailable to continue on the team. Agile also helps resist scope creep, enforces visibility into the project status at all times, and reduces the economic risk to the project from late changes in requirements.
Agile methodologies have been shown to lead to significant productivity gains. Part of the reason for this is the emphasis on fluid, engaged communication and collaboration. Agile teams embrace collaboration in the truest sense of the word; there are shared goals, shared knowledge, shared learning, shared progress, and a shared responsibility by the team to meet its commitments. Agile increases productivity by focusing the team’s attention like a laser on delivering the highest-priority, highest-valued features in short increments of time using the most productive mechanisms to accomplish the work. Other benefits of Agile discussed here also ultimately result in improved time-to-market. Higher quality of code and emphasis on automated testing means that less time is spent on testing and bug fixing. Improved risk management and visibility result in the absence of nasty surprises, especially late in the project. Also, prioritizing the scope by business value makes it possible to deliver high-impact, high-value functionality first, which, in accordance with the Pareto Principle, may enable the company to bring the best set of features to the market faster.
Agile methodologies treat requirements in terms of ‘user stories’, which leads to a much closer alignment between what customers want and what developers build. The customer is engaged through frequent and direct communication, and incremental releases are reviewed by the customer after every iteration. With features being delivered incrementally every few weeks, the customer has the opportunity to see how the development team is interpreting their requirements, and has the chance to redirect efforts when they deviate from their expectations, or when market conditions change. Furthermore, a partially developed system can also educate the customer, for often there’s a difference between what’s asked for and what’s needed – and usually that’s not apparent until there is some actual software to look at. Thus, along with increased quality, Agile tends to deliver applications that more closely meet customer expectations. In fact, Agile teams are often said to produce software that ‘delights the customer’.