I’ve written a lot about cloud native apps, containers and microservices recently. These technologies are revolutionizing application design and development. However until now I haven’t discussed a closely related set of process innovations, DevOps. DevOps is all the rage in modern software development and that should be no surprise to long term software development professionals. DevOps is a methodology of iterative software development that embraces close collaboration between contributing software developers, QA and IT operations staff. It’s both a software development process methodology, as well as a toolchain implementation recipe. When fully embraced, there are many valuable attributes to this iterative style of development including (much) shorter release cycles, faster time to market, less intrusive upgrades, and higher quality. It also is ideal for cloud services, where rapid iteration on functionality and close cooperation between development and operations is an absolute necessity.
Why does DevOps give quicker, more predictable and higher quality results? DevOps encourages rapid integrations and frequent communication between team members. The older waterfall development methodology meant a lot of upfront design work, building large components independently and then integrating them together. This usually resulted in many missed deadlines as team members made different incompatible assumptions and correcting them required significant and intrusive changes. Also, upfront design didn’t allow for adjusting the design along the way as more was learned about the details of the project. DevOps arose as a reaction to the problems with waterfall development and avoids these problems through continuous integration with each integration being much smaller in scope.
Another impetus for DevOps is the cloud services world. In the cloud native world, delivery is not preparing a software package for a customer to install or upgrade in their environment. Instead customers purchase a service that the developer is providing, hence deployment means updating a cloud-based production environment in a seamless manner while making sure there is no disruption in service. In the cloud native world, software must be designed from the beginning with seamless upgradability, availability and scaling in mind and in close collaboration with the operations staff that will manage the production deployment.
DevOps embraces new cultural practices and procedures as well as a variety of tool changes. DevOps toolchains, also referred to as CI/CD pipelines (which is an acronym for Continuous Integration/Continuous Delivery and/or Deployment), provide automation assistance for a staged production line approach to rolling out code updates with modifications deployed as frequently as daily or weekly. Changes are made and unit tested in a developer sandbox and upon successful results are scheduled and staged for system test, followed by production deployment. System test is also performed frequently and continuously.
The production deployment phase is typically also done iteratively, with the new code deployed to a small percentage of servers and initially monitored there so that any problems can be detected early and if needed rolled back before the code is deployed more broadly to all the servers. Daily or weekly updates to a production system or service is better suited to cloud deployed services, not for on-premise installed software, but the principles still apply just as well during the actual development cycle of projects targeted there as well.
Because in the cloud services case, deployments are being done to live production servers, more automation is used in conjunction with Blue/Green deployments; a technique that reduces downtime and risk by running two identical production environments called Blue and Green. At any time, only one of the environments is live and serving production traffic, while the idle environment is used to stage the newest version. This technique enables easy roll forward and roll back in the event of a problem with minimal disruption of service.
To be successful and efficient, DevOps requires the right tools throughout the software development lifecycle. Embotics® vCommander™ has a strong role to play here with its comprehensive automation, staging and third party integration capabilities¹. In particular, vCommander is a great platform for creating developer sandboxes in the unit test phase and efficient, automated provisioning and resets for system test phase.
¹ Scott Davis is EVP of Product Engineering and CTO of Embotics, the cloud automation company for IT organizations and service providers that need to improve provisioning or enable self-service capabilities. With a relentless focus on delivering a premier user experience and unmatched customer support, Embotics is the fastest and easiest way to automate provisioning across private/public/hybrid cloud infrastructures. Its flagship product, Embotics vCommander, is used by organizations including Nordstrom, NASA, Fanatics, Informatica and Charter Communications. For more information, visit http://www.embotics.com, and follow Embotics on Twitter and LinkedIn.