Science & Tech Spotlight: Agile Software Development
Fast Facts
Agile is an approach to software development in which software is built incrementally and is continuously evaluated on functionality, quality, and customer satisfaction. By engaging customers early and reviewing software regularly, Agile can reduce the risks of funding a program that fails or produces outdated technology.
Agile has the potential to save the government billions of dollars by delivering services more efficiently and effectively. However, the transition to Agile can be costly and time consuming. We discuss the policy context and considerations to overcome challenges when implementing Agile for federal IT programs.
[March 2021 update: To see our 4 videos on Agile click here. Topics include DevOps, Continuous Integration, Software Bottlenecks, and Daily Standup Meetings.]
Highlights
Why This Matters
Agile software development has the potential to save the federal government billions of dollars and significant time, allowing agencies to deliver software more efficiently and effectively for American taxpayers. However, the transition to Agile requires an investment in new tools and processes, which can be costly and time consuming.
The Methodology
What is it? Agile is an approach to software development that encourages collaboration across an organization and allows requirements to evolve as a program progresses. Agile software development emphasizes iterative delivery; that is, the development of software in short, incremental stages. Customers continuously provide feedback on the software's functionality and quality. By engaging customers early and iterating often, agencies that adopt Agile can also reduce the risks of funding failing programs or outdated technology.
Figure 1. Cycle of Agile software development
How does it work? Agile software development is well suited for programs where the end goal is known, but specific details about their implementation may be refined along the way.
Agile is implemented in different ways. For example, Scrum is a framework focused on teams, Scaled Agile Framework focuses on scaling Agile to larger groups, and DevOps extends the Agile principle of collaboration and unites the development and operation teams.
Scrum, one of the most common Agile frameworks, organizes teams using defined roles, such as the product owner, who represents the customer, prioritizes work, and accepts completed software. In Scrum, development is broken down into timed iterations called sprints, where teams commit to complete specific requirements within a defined time frame. During a sprint, teams meet for daily stand-up meetings. At the end of a sprint, teams present the completed work to the product owner for acceptance. At a retrospective meeting following each sprint, team members discuss lessons learned and any changes needed to improve the process. Sprints allow for distinct, consistent, and measurable progress of prioritized software features.
How mature is it? Organizations have used versions of incremental software development since the 1950s, with various groups creating Agile frameworks in the 1990s, including Scrum in 1995. In 2001, a group of software developers created the Agile Manifesto, which documents the guiding principles of Agile. Following this, Agile practitioners introduced new frameworks, such as Kanban, which optimizes work output by visualizing its flow.
The Federal Information Technology Acquisition Reform Act (FITARA), enacted in 2014, includes a provision for the Office of Management and Budget to require the Chief Information Officers of covered agencies to certify that IT investments are adequately implementing incremental development. This development approach delivers capabilities more rapidly by dividing an investment into smaller parts. As a result, more agencies are now adopting an incremental, Agile, approach to software development. For example, in 2016, the Department of Homeland Security announced five Agile pilot programs. In 2020, at least 22 Department of Defense major defense acquisition programs reported using Agile development methods.
As the federal government continues to adopt Agile, effective oversight of these programs will be increasingly crucial. Our GAO Agile Assessment Guide, released in 2020, takes a closer look at the following categories of best practices:
Agile adoption. This area focuses on team dynamics, program operations, and organization environments. One best practice for teams is to have repeatable processes in place such as continuous integration, which automates parts of development and testing. At the program operations level, staff should be appropriately trained in Agile methods. And at an organizational level, a best practice is to create a culture that supports Agile methods.
Requirements development and management. Requirements—sometimes called user stories—are important in making sure the final product will function as intended. Best practices in this area include eliciting and prioritizing requirements and ensuring work meets those requirements.
Acquisition strategy. Contractors may have a role in an Agile program in government. However, long timelines to award contracts and costly changes are major hurdles to executing Agile programs. One way to clear these hurdles is for organizations to create an integrated team with personnel from contracting, the program office, and software development. Clearly identifying team roles will alleviate bottlenecks in the development process.
Figure 2. Different roles come together to make an Agile software development team.
Program monitoring and control. Many Agile documents may be used to generate reliable cost and schedule estimates throughout a program’s life-cycle.
Metrics. It is critical that metrics align with and prioritize organization-wide goals and objectives while simultaneously meeting customer needs. Such metrics in Agile include the number of features delivered to customers, the number of defects, and overall customer satisfaction.
Opportunities
- Flexibility. An Agile approach provides flexibility when customers’ needs change and as technology rapidly evolves.
- Risk reduction. Measuring progress during frequent iterations can reduce technical and programmatic risk. For example, routine retrospectives allow the team to reflect upon and improve the development process for the next iteration.
- Quicker deliveries. Through incremental releases, agencies can rapidly determine if newly produced software is meeting their needs. With Agile, these deliveries are typically within months, instead of alternative development methods, which can take years.
Challenges
GAO has previously reported on challenges the federal government faces in applying Agile methods; for the full report see GAO-12-681.
- Lack of organizational commitment. For example, organizations need to create a dedicated Agile team, which is a challenge when there is an insufficient number of staff, or when staff have several simultaneous duties.
- Resources needed to transition to Agile. An organization transitioning to Agile may need to invest in new tools, practices, and processes, which can be expensive and time consuming.
- Mistrust in iterative solutions. Customers who typically see a solution as a whole may be disappointed by the delivery of a small piece of functionality.
- Misaligned agency practices. Some agency practices, such as procurement, compliance reviews, federal reporting, and status tracking are not designed to support Agile software development.
Policy and Context Questions
- In what ways can Agile help the federal government improve the management of IT acquisitions and operations, an area GAO has identified as high risk for the federal government?
- How can policymakers implement clear guidance about the use of Agile software development, such as reporting metrics, to better support Agile methods?
- How might resources need to shift to accommodate the adoption of Agile in federal agencies? What risks could those shifts pose?
- What updates to agency practices are worth pursuing to support Agile software development?