CICWhat?!?
Let’s assume you are coming from the ‘old’ world and want to merge your Software Development LifeCycle (SDLC) into a more fancy agile way of working. And your main goal is to improve your time to market to serve your customers better. Sounds familiar? The question is: how can you get there?
To clarify: Time to market is the length of time it takes from a product being conceived until its being available for sale. And shorten those time lines means improving the production process. But how? There are many ways to Rome of course, but Continuous Integration Continuous Delivery (CI/CD) is the most obvious one.
CI/CD is the ability to quickly and in short cycles deliver stable pieces of software that are available to customers. Quickly and in short cycles. Sounds promising, right? But can it really help you and what is needed to make it happen?
Picture your SDLC as an assembly line. The faster your assembly line runs, the quicker you reach your goal. So the perfect situation would be only one assembly line, moving at the right speed and operated by capable resources. But unfortunately there is no such thing as a perfect world. For example take the first one: ‘only one assembly line’. This indicates that the whole process is automated. All activities from ‘source code management’ until ‘acceptance test’ or even the ‘deploy to production’ are closely connected and no manual interventions are needed. But most likely it is not. And this is where CI/CD comes into place. CI/CD turns your fragmented production process into one smooth running assembly line. How? With tools!
If you google ‘CI/CD tools’ you will see that there is almost an endless variety of tools available that can help you automate your processes. So it is a matter of making the right choice to select the tool that fits your needs. Making the right choice can be based on company policy, experience in your team or just a good old evaluation.
It is important that you always keep the goal in sight. Think big and start small! Meaning that up front you need to design the most perfect assembly line, without paying attention to technical difficulties or challenges. What do you want to achieve? What is your perfect world? And after you have set your goals, start optimizing and implementing. Step by step. First the low hanging fruit.
What will it bring you? Most likely frustration! :) Because it is not easy. It is not something you do overnight. Common pitfalls during the implementation of CI/CD are:
- The lack of knowledge (make sure you have skilled, experienced people on-board).
- Automating the wrong processes first (remember small steps, low hanging fruit).
- Lack of meaningful dashboards and metrics (stats about the progress is key).
Let’s assume you succeed. The time to market will go from months to weeks or even days. Great! But what’s next? Sit back and relax? Obviously this is a rhetorical question. You always have to ask yourself the question: ‘Where can we improve?’. Are we able to create shippable products per sprint? Is the ‘deploy to production’ already part of our assembly line? And always keep a close eye on the tool market. Tools evolve by the day and don’t hesitate to at least consider a tool replacement. But only if your process will really benefit from it.
Some takeaways to conclude:
- Think before you act. Make a plan, have a look at your available resources and knowledge, define a concrete (ultimate) goal, think big but start small.
- Don’t make it too complex. The solution / implementation should be manageable otherwise you are wasting valuable time on maintenance and fixing the assembly line. Consider generic tools with multiple functionalities instead of several specific tools that need to communicate with each other.
- Don’t just fix the product, fix the process too. Despite all testing and checks, you will have issues in production. And if so, make sure that you don’t just fix the issue, but always ask the question: can we prevent this in the future? Fix the process too.
- Continuous Improvement. Never be satisfied. Don’t sit back and relax.