As the 21st century dawned, a new method of developing software was introduced. This was called the agile method of development. Agile development breaks a large software project into smaller pieces that can be completed — and often deployed — separately. These small development cycles are called sprints. The goal is to complete one part of the project, such as a user interface, module or specification, during each sprint. After every sprint, the completed work can be reviewed and tested, and if modifications are needed, they can be handled during the next sprint.
Agile vs. WaterfallNow compare the agile method with the traditional waterfall method of development. With the waterfall approach, all specifications are detailed in advance. Developers start at point A and proceed in a linear fashion until the final point is reached. This means that months or even years can elapse between conception and deployment. The client, if outsourcing development, or business, if developing in-house, is investing in the project but realizing no return until software is finally completed. Furthermore, if specifications must be changed to integrate new technology or respond to market conditions, changes can be time-consuming and costly.
With the agile method, deliverables can be produced frequently, allowing individual modules to be deployed for testing by actual users. Return on investment can be accelerated, user suggestions can be incorporated and innovative technologies can be easily added if necessary. The quality of the finished product is as good as or better than software developed using the waterfall method.
The Missing Piece of Agile DevelopmentDespite the advantages of the agile method, software developers soon realized that there was a problem that prevented the agile method from reaching its full potential. It was the division between the department that developed the software and the department that prepared it for final release. Development would complete its part of the work and then send the product to the operations department to prepare it for release. This could result in a significant delay, so although the development went much faster, the time required to get the software ready for production could make it appear that the agile method was not providing the results that it should.
Given the basics of human nature, it is easy to imagine that in many situations, each department blamed the other for the delay. However, it typically was neither department's fault. When you create software in one environment and deploy it in a different environment, delays are going to happen. Moving thousands of files that each contain thousands of line of complex code is not an easy task. It takes time to ensure that every line of code translates properly from the development environment to the production environment.
Regardless of the innocence of those involved, delays can frazzle nerves and frustrate everyone in both departments. From the developers' point of view, they provided production with a great product. It operated flawlessly on their computers, and as far as the developers are concerned, their code was perfect. The operations department, on the other hand, must ensure that the software runs as it should and is completely ready to be put into production. Unfortunately, when operations tests the software under "real world" conditions, they often find that the code is not nearly as perfect as the developers believed. Hard feelings can develop between the two departments, leading to additional barriers that must be overcome before the software is finally released.
DevOps to the RescueIn retrospect, the solution seems obvious. Why not combine personnel from development and operations into a cohesive team with people from both departments involved in all aspects of the project from the very beginning? The team would carry the abbreviated name of DevOps to reflect the collaborative, unified approach.
Combining the two departments was the missing piece in agile development. The people from operations can offer advice or explanations of what they need before the code is written. Developers gain a better understanding of how the software needs to perform in the production environment, allowing them to tailor their code to meet those requirements. With the entire team committed to getting the product released more quickly, the time to deployment can be shortened significantly.
Another significant advantage is that DevOps can use automation tools to speed processes. For example, developers can create a testing environment that replicates real-world conditions. They can allow the automated tests to generate any fixes needed and verify that the changes will not affect functionality. Instead of having to go through line after line of code to find problems, developers can move on to other tasks. Automation can also be incorporated into the code to eliminate redundant operations, such as reducing the number of times that a user must click a button to complete a task. Configuration settings, event triggers and much more can be automated to provide a better user experience. Migrating code from developers to production can also be automated so that nothing is lost in the translation.
The Formula: DevOps + Agile Philosophy + AutomationThe key to getting quality software ready to deploy quickly starts with a qualified DevOps team. The improved communications and collaborative spirit keeps the project moving forward and eliminates barriers. Both development and production can leverage the benefits of the agile philosophy; for example, as developers complete a sprint, operations can begin to prepare it for production. The final part of the equation is to automate as much as possible. Automation can save time, improve quality and allow personnel to focus on what they do best — creating exceptional software products.
At delaPlex, we pride ourselves on our forward-thinking attitude. Therefore, we decided several years ago to embrace DevOps as a means of serving our customers better. Just as our agile approach speeds development, DevOps speeds the time to market on the production side. Using more than two decades of expertise gained from a wide variety of software projects, we assist clients in the automation of provisioning, configuring, building, testing, deploying and monitoring software products by leveraging the best tools currently available. We also support cloud platforms, including Microsoft Azure and Amazon's AWS. Contact us today to learn more about how we can help you with all of your software engineering needs.