DevOps vs Agile: What's the difference?
Early on, software development didn't really fit under a particular management umbrella. Then along came waterfall, which spoke to the idea that software development could be defined by the length of time an application took to create or build.
Back then, it often took long periods of time to create, test, and deploy software because there were no checks and balances during the development process. The results were poor software quality with defects and bugs and unmet timelines. The focus was on long, drawn-out plans for software projects.
Waterfall projects have been associated with the triple constraint model, which is also called the project management triangle. Each side of the triangle represents a component of the triple constraints of project management: scope, time, and cost. As Angelo Baretta writes, the triple constraint model "says that cost is a function of time and scope, that these three factors are related in a defined and predictable way… [I]f we want to shorten the schedule (time), we must increase cost. It says that if we want to increase scope, we must increase cost or schedule."
Transitioning from waterfall to agile
Waterfall came from manufacturing and engineering, where a linear process makes sense; you build the wall before you build the roof. Similarly, software development problems were viewed as something that could be solved with planning. From beginning to end, the development process was clearly defined by a roadmap that would lead to the final delivery of a product.
Eventually, waterfall was recognized as detrimental and counterintuitive to software development because, often, the value could not be determined until the very end of the project cycle, and in many cases, the projects failed. Also, the customer didn't get to see any working software until the end of the project.
Agile takes a different approach that moves away from planning the entire project, committing to estimated dates, and being accountable to a plan. Rather, agile assumes and embraces uncertainty. It is built around the idea of responding to change instead of charging past it or ignoring the need for it. Instead, change is considered as a way to fulfill the needs of the customer.
Agile is governed by the Agile Manifesto, which defines 12 principles:
- Satisfying the customer is the top priority
- Welcome changing requirements, even late in development
- Deliver working software frequently
- Development and business must work together
- Build projects around motivated people
- Face-to-face communication is the most efficient and effective method of conveying information
- The primary measure of success is working software
- Agile processes promote sustainable development
- Maintain continuous attention to technical excellence and good design
- Simplicity is essential
- The best architectures, requirements, and designs emerge from self-organizing teams
- Regularly reflect on work, then tune and adjust behavior
Agile's four core values are:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
This contrasts with waterfall's rigid planning style. In agile, the customer is a member of the development team rather than engaging only at the beginning, when setting business requirements, and at the end, when reviewing the final product (as in waterfall). The customer helps the team write the acceptance criteria and remains engaged throughout the process. In addition, agile requires changes and continuous improvement throughout the organization. The development team works with other teams, including the project management office and the testers. What gets done and when are led by a designated role and agreed to by the team as a whole.
Agile software development
Agile software development requires adaptive planning, evolutionary development, and delivery. Many software development methodologies, frameworks, and practices fall under the umbrella of being agile, including:
- Kanban (visual workflow)
- XP (eXtreme Programming)
- Feature-driven development (FDD)
- Test-driven development (TDD)
- Dynamic systems development method (DSDM)
- Adaptive software development (ASD)
All of these have been used on their own or in combination for developing and deploying software. The most common are scrum, kanban (or the com