Deployments used to be a nightmare. Traditionally, the phases of deployments could take several hours or even days. But in the era of CI/CD, companies are shipping out product updates in minutes. You’ve probably heard of the term CI/CD being thrown around quite a lot lately. In simple terms, it's a combined practise of Continuous Integration and either Continuous Delivery or Continuous Deployment.
As a growing startup, we started with no CI/CD at all and after some time, we realised that it caused a lot of headaches for everyone involved. Every time there was a new change, we had to manually build new images, test, update deployment files and manually deploy. It also did not help that bugs kept on coming, and hours were spent in maintaining deployments and keeping production running.
Needless to say, we have improved a lot since then. After roughly 600 automated deployments, here's what we learned about CI/CD:
At Noodle Factory, we are a small team (with big dreams!), and speed of deployment has always been vital. Deployment was something that took quite a bit of chunk of our day, and it was a tedious and repetitive task. What's worse was when we had to delay new features simply because we were caught up doing deployments. This gave a sense of unaccomplishment to the team, and could easily be avoided by following some practises.
By automating the whole process to a software that has a fixed pipeline, our developers can now spend precious time on the things that actually matter. You know, like actual product development, squashing bugs, and delivering new features for your awesome chatbot. Psst, we have a new quiz feature coming up soon! :)
Not only are CI/CD tasks tedious and repetitive, but they are also prone to errors. Integrating software that is built by different people is hard. As more and more people touch a codebase, the more branches you would have, and therefore, higher complexity.
Having a small team helps to reduce complexity, but inevitability, there would still be issues here and there. While it used to be the norm that teams spend days trying to integrate their branches, trying to deliver a working product to customers, in the modern era of cloud, this is no longer something that we should accept any more.
CI/CD changes that, by a mile. CI practises encourages developers to push code every day (even multiple times a day) and when you integrate small pieces of code one at one time, these changes are way simpler and easier to integrate into an existing codebase. Resulting in fewer issues that have to be repaired in the future.
You have been developing features for weeks, everything seems to be working well, so you merged to master. Little did you know that your weeks of work only causes a sudden breakdown and now customers are complaining.
As scary as this sounds, it could have been easily avoided by pushing changes little by little every day. Faults are easier to detect and in the event of a fault, you can recover and troubleshoot much quicker since you are dealing with less code. Remember, two minutes of downtime during peak traffic times can cost you business.
You might think CI/CD is mainly a technical term and is only for developers. While there is some truth to that, the benefits of CI/CD goes beyond making the developer's life easier.
Your customers are the main users of the product and they want to know they are being heard and that their feedback is important. You would want to keep your products up-to-date by delivering new features based on the way your customers use the product and fixing bugs at critical times. This will not only retain current users but also help you gain new ones.
Win-win for everyone!
In this fast-paced environment, speed is the name of the game. Automation does not always mean quality but the more automated your development processes are, the faster quality releases can be accomplished.
As a business that has to juggle resources, CI/CD has transformed our deployments workflow for the better, and our customers reap the benefit from it, too.