DevOps for all software models
I was recently asked the question, “Does DevOps require an agile model of software development?” My first reaction was, yes, absolutely. Why would you put racing tires on a pinto? But on further reflection, I don’t think that is the case. In fact, I think the vision of DevOps spans well beyond the uber agile models of development popularized by startups.
DevOps is simply the vision that business value is maximized when software developers and systems operations cooperate to achieve reliable, repeatable and incremental enhancements to production systems. This is achieved through configuration management of the complete end-to-end delivery pipeline and automation of every repeatable process.
DevOps is often employed by unregulated, low-risk projects that are the hallmarks of most startups and web-based commercial services. However, heavily regulated industries such as finance or government often reject DevOps because of the inability to automate certain portions of the development pipeline. This is the classic “all or nothing” antipattern. In fact, DevOps can integrate nicely into the full software development lifecycle (SDLC) for most any software development methodology. Here are three examples:
The waterfall method is a plan-based approach to software delivery. While it has received a fair amount of criticism over the years, it remains an excellent model for projects that are well known and have a high risk. Development moves in a strict sequential process across five phases: requirements analysis, architectural design, software implementation, verification and validation, and operations and maintenance. These phases are respectively led by analysts, architects, software engineers, quality assurance engineers and operations administrators.
The DevOps pipeline fits this through a similar sequential, phased process. User acceptance tests (UATs) are defined and described during the requirements phase. Test specifications, or unit and integration tests, are written during the architectural phase to support true test-driven development (TDD). During software development, continuous integration is implemented to verify accuracy of the software components against the suite of unit tests, measure the quality of the code and test interaction among the components. Verification and validation of the software include more rigorous user acceptance and nonfunctional requirements testing using full end-to-end automated deployment methods. This is also when manual exploratory testing is accomplished. Last, during the maintenance phase, the software is delivered and deployed through a fully automated framework. By the time the software has reached the maintenance phase, an automated structure has been built around the solution that tests the software against requirements, functionality, interaction, performance and usability. Therefore, maintenance can become a fully agile process.
2.Rapid application development (RAD)
Some software development projects such as service-oriented architectures (SOAs) have a short time-to-market and include team members with a strong understanding of the business use cases. In this design, which can be highly modularized, teams often adopt the RAD methodology. RAD is an iterative approach to combine requirements analysis and development into a single phase and makes compromises on usability, performance and total feature set to quickly deliver prototypes. This allows teams to publish software solutions during what would have traditionally been the requirements analysis phase and therefore can help drive the requirements process.
Agile software development and DevOps are tightly intertwined. Agile is an iterative methodology to software delivery that deploys fully operational features (often called a thinly sliced vertical layer) for each iteration. Agile enables a fast time-to-market for solutions that maintains quality but sacrifices feature completeness. This helps guide requirements analysis early in the process based on measurable feedback. Because iterations are typically two weeks, the software verification and delivery process must have a minimal overhead or product velocity will be severely constrained.
DevOps enables short iterations in an agile process by allowing the team to focus on feature development. The best way to tell if teams are really using DevOps in agile is to ask how long their iterations are. If it’s a month or more, they do not have an automated deployment DevOps solution.
Does DevOps require agile? A better question is, “Can software delivery work without DevOps”? Whatever software delivery methodology you use, you will reduce your total cost of development, reduce velocity and increase maintainability through DevOps implementation.
What software methodology do you use? How has DevOps helped your project? Let