I’ve worked at some companies where it takes a whole weekend to deploy their software. People have to stay up all night running one command, waiting for it to finish, checking the results, then running the next command. They do this for hours. Everyone knows this sucks, but if you only deploy once every few months, it seems like a small price to pay relative to all the features you’re adding. Besides, once the ordeal is over, the last thing anyone wants to think about is how to improve it. Everyone is just thankful it’s done.
These long deploys are a cost that lowers profits. When your employees work all night and day, it’s demotivating. It messes up their work/life balance and they can’t give 100% the next day because they’re exhausted. That’s the human element. But, from a purely economical standpoint, it would be much better if they could spend all those hours working on new features instead of deploying.
All of this is preventable. It is possible to take software that takes a weekend to deploy and get it to deploy in an hour. It’s even possible to take software that takes a weekend to deploy and get it deploy in a minute! I’ve done it. The process is called Continuous Delivery and here’s how it works:
You raise the quality of your software so high that you’re confident that your release is stable. One way to achieve this is through automated tests that run every time a change is made. In addition to this confidence, you must automate the deployment process. When you have confidence in your release and an automated way to deploy it, you can deploy as often as you want.
That is a huge competitive advantage. If you can deploy changes faster, you can get feedback faster. Faster feedback means you can improve your features faster, and that will mean happier customers. You may think that a frequently deployed product implies it’s unstable and always changing. But, in my experience, it gives customers a sense that it’s actively being worked on and that the company is always improving things.
Continuous Delivery doesn’t happen over night because it takes a long time to gain confidence in your release. Gaining confidence means you have to be constantly improving yourself, which is not a task that can be “finished”. It needs to become a habit. But, you can start automating the deploy today. This will have immediate benefits: Your developers can use the same process on their machines to test your software. This will make their environment similar to the production environment and this in turn will reduce the number of surprises like, “it worked on my machine but it doesn’t work when I deploy to the production environment”.
The longer you wait to implement Continuous Delivery, the more it’s going to cost over time. Continuous Delivery isn’t a shiny new feature, but it will give everyone more time to create shiny new features in the future.