Continuous Delivery
What is Continuous Delivery? It is the process of getting your software to your customers as soon as it is ready. More than that, it is getting individual features, enhancement and defect fixes to your customers as soon as they are ready. Let's talk about where you probably are right now. You are most likely delivering at a regular cadence. Whether that is monthly, weekly, each sprint or once a year, that is what you are doing. I think talking through an example is the best way to illustrate this.
You have a bug in the software. The engineer fixes it and it passes testing. Now, how long until your customer gets this bug fix? At your regular release cadence? Or quicker, maybe a hotfix. Hot fixes cost time and usually delay your next regularly scheduled release. For the same example, but this time continuous delivery. The engineer fixes it and it passes quality gates and finally it is deployed to production and available for your customer to enjoy. The whole process of customer sees bug, reports bug, support reviews bug, engineering reviews bug, engineering fixes bug, customer is happy gets streamlined. We all know the longer the customer waits, the less important the customer feels.
There are a few reasons why this is difficult. First, you need a CD (Continuous delivery) pipeline that works. Second, you (this is the everyone "you") must be willing to adapt to this sort of flow. On top of that, you need to define your work in such a way that your customers get value out of each item you do because each thing is a deployment/release to customers. The world you are in now thinks of deployments to production as a big milestone or are large effort. The smaller the change made, the smaller the risk to the customers. If you follow that line of thinking, then the more deployments to production the better.
领英推荐
How do we change our whole organization from large delivery to continuous value delivery? A lot of work. It will take changing a lot of habits and minds. The benefits will be worth cost of change. Like any other journey it starts with one step at a time. Start with your engineering processes. What are the manual steps for every release? You need your CD pipeline to be automated. Define each step until every release is a click of a button. Next, define all of your gates. What specific things must be checked/signed off to get code to production. Automate what you can and what you can't you need to tie into the CD pipeline. If there is a manual review sign off, that is fine. Make sure the notification that something needs to be reviewed is automated. Make sure the person has a button that clears the gate and the delivery moved to the next step. Engineers love automating things, so this should be easy to get buy in.
The hard part is that you have to get everyone else on board (Product, Support, Sales, Marketing, etc.). Support will be scared until you showcase how smooth the deployments go. Sales, they only care that new features are ready for selling and bugs are not preventing deals from closing. I bet they don't care much. Marketing does care about planning, this is going to take some buy in. Product does want things as soon as possible, but they want to control when something is ready (mostly for features). The perspectives of Product and Marketing teams is why I talk about deployment vs release. For items that Marketing or Product deem to be larger, we use modern practices of feature flags. The items are in production but hiding behind a flag. They can be turned on at any time.
The hardest part down your path to true Continuous Delivery is changing how you define work. You must move from a list of everything needed to deliver a feature to each item stands a unit of value for the customer. This goes into how you do User Stories and scrum practices (if that is your SDLC). Product and Engineering must define a value that is delivered by each item. And everyone must agree if things are hiding behind flags or just default being delivered. This part takes a lot of learning. But if you can make it through this journey your customers will be continually getting more value delivered. They will not be waiting for your next regularly scheduled delivery.