Does any of this sound familiar?
Unfortunately, this is all too common. Even though many companies have adopted agile software development methodologies, the difficulties of delivering software to production are often unaddressed.
It is important to distinguish the difference between “Continuous Delivery” and “Continuous Deployment”. These terms are often confused or used interchangeably. Continuous Deployment refers to the practice of deploying software to production as soon as automated tests pass. It is often seen as the holy grail of software delivery practices and is touted by innovative companies like Etsy and Netflix. Continuous Delivery is a pre-requisite step along the spectrum to Continuous Deployment. The extremely important distinction is that Continuous Delivery only refers to the idea that an application is ready to be deployed at any time. It ensures that a new software release can be deployed automatically to a staging environment and verifies everything is working correctly through a suite of automated tests. The same automated deployment can be used to deploy to production but that remains a controlled, manually triggered process.
I’ve seen a lot of companies dismiss the idea of adopting Continuous Delivery practices by saying things like “We have no need to deploy 10 times a day”. Of course, as you know, they are confusing Continuous Deployment with Continuous Delivery. But, they are often right - continuous deployment doesn’t make sense for every organization. However, they are throwing the baby out with the bathwater. While Continuous Deployment may not be right for every organization, Continuous Delivery is a fundamental requirement for any organization who ships software to customers.
With a solid Continuous Delivery practice in place, you should always be confident that your newest release will work correctly on production. Instead of a tense and tedious process, the only thing you should have to do to release a new version to production is to press a “Deploy” button.
My goal is to make your software deployments routine and boring. You should not have to schedule your deployments for late at night, early in the mornings or on weekends. Your deployments will no longer require a long process document and checklist. You will not have to rely on a single deployment “expert” to release a new version of your application - anyone on the team will be able to press the deploy button. New releases will no longer be risky and a source of stress. You will be able to increase your response time and deliver fixes or features to your customers much more quickly. Deployments can be smaller and more frequent enabling you to experiment more and adapt rapidly to customer feedback. Reducing the time it takes between identifying an improvement to your software and delivering it to your customers is going to enable your organization to improve the quality of your software.
I will work with you and your team to ensure that you have a solid Continuous Integration solution in place. Continuous Integration refers to the ability to automate the build and test phase of your application before you deploy it - whether to a testing, staging, or production environment. It is the foundation of a successful Continuous Delivery process. It is important to verify that your application meets certain quality criteria before you deliver it. Next, I will help ensure that your deployment is completely automated. After a new release passes the Continuous Integration phase, we will make sure it is automatically deployed to a production-like staging environment. At that point, manual or automated acceptance tests can be run to make sure the release is ready for production. We will enable your team to simply run a single script or press a button to kick off the deployment to production whenever you are ready. Based on the needs of your organization, we will evaluate whether or not it makes sense to move further along the spectrum towards a Continuous Deployment practice.
Continuous Delivery is going to enable your business to react to the needs of your customers much more rapidly - whether that is fixing problems or delivering new features. It can help lower stress and improve the morale of your team. It is immensely satisfying when a developer is able to get out new code that they may be really proud of to customers right away. And, of course, your customers are going to be delighted when you are able to meet and exceed their expectations on a regular basis. Contact me to learn more about how I can help your company achieve the benefits of Continuous Delivery.