The end goal of every Agile process is to deliver value to the customer early and often. However, many organizations struggle with getting work that is “done” across the finish line and into customers’ hands. Software teams that accomplish work rapidly and maximize value for their customers use a robust, automated continuous deployment process to reduce work into simple units, remove roadblocks, and embrace change that leads to progress.
Here is a brief intro to continuous deployment, including three things technology leaders can do to get started implementing it into their agile workflows right away.
What is Continuous Deployment?
Many development teams are already familiar with continuous integration (sharing code as soon as possible) and continuous delivery (short, releasable increments of work) and are reaping the rewards. Continuous deployment is the natural progression of a team that has already implemented continuous integration and delivery.
It removes the friction of waiting for a deployment engineer to become available, another in-progress feature to be completed, or another team to sign off on features. Continuous deployment brings Agile methodology full circle by shipping valuable new features to the customer as soon as possible.
1. Skip Staging and Adopt DRIFT
Some readers may be wondering at this point, “What happens to my staging or UAT environment? Surely, you aren’t suggesting we skip this phase!” But yes, I am! The staging environment invites a certain degree of procrastination and fail-forward thinking; “If it doesn’t work the first time, it’s just staging, we can try again.”
The goal of the dev team should be DRIFT – Do It Right The First Time! Putting off pesky details like that database script to run, the updated template file to copy, or even new infrastructure to provision prevents teams from developing a smooth, repeatable deployment process. All too often, features arrive in the staging environment half-baked, then languish for days or weeks while iterative attempts are made to fix them.
2. Define Done Software
How do teams break this mindset and adopt a DRIFT mentality? They start with crafting a concrete and comprehensive definition of done software. Not just code-complete or even delivered to staging; but - to the best of their knowledge, it has satisfied the business requirements and will “just work” when put into customers’ hands.
A strong definition of done bolsters everyone’s confidence. It becomes very clear whether work is “done” or not – either the developer is still working, the business has accepted it, or it has been sent back for more work. Ultimately, the development team starts producing customer-ready products.
3. Automate: Trust the Machines
There can be many pitfalls to a manual software deployment – forgetting that crucial step, clicking the wrong button, pushing the wrong codebase, or working late into the night (or weekend!) to avoid customer downtime.
One of the things I love about automating the deployment process is that it forces developers to think through and account for all the minutia that would otherwise prevent the process from being repeatable. They must document every step: not just code release, but infrastructure, schema, data, storage, DevOps tasks… everything a machine needs to know how to perform in an unattended run.
Machines are really good at accomplishing repeatable tasks. In fact, much better than we humans are! And when humans aren’t spending hours of each sprint deploying code manually, they are free to work on other value-add tasks.
Deliver Value with Continuous Deployment
At its core, continuous deployment is about delivering value to customers as soon as possible. It guides teams through the process of defining done and gaining business acceptance earlier rather than later in the pipeline. Long deployment waiting periods are a thing of the past, and automated deployments virtually eliminate manual effort and downtime. In the end, work reaches customers sooner, and the end goal of Agile methodology is achieved!
Contact DragonSpears, if you need help implementing continuous deployment in your organization.