Introduction To Continuous Delivery
Many agile development teams find it difficult to have the same agility in delivering software, compared to the agility achieved in developing new solutions. The fact is that developing software is one activity and delivering software running in production or QA environment is another kind of work, but in agile development these two activities walk side by side.
Thinking this way, how can we achieve a successful sprint if we cannot deliver software in an acceptable time? Yes, we cannot achieve a successful sprint without an efficient and fast build, release and deliver process.
Builds, Releases And Tests (Quality Assurance)
The best way to improve the process of deliver software continuously, is to make the construction of integrated builds and releases automatic. There is no value in creating a continuous delivery process if we cannot create high quality builds and releases automatically. Add to this, the fact that it is highly necessary to make the software quality testing process much more mature and efficient, under the risk of having a continuous process of non-quality delivery. The development team together with testers must create automated unit tests (white box tests) and functional tests (black box tests) that run automatically after the creation of each build.
It is highly recommended to produce a daily and automated build containing all changes made by development team during a work day. This action will help the whole development team to anticipate bugs and risks. This would be a good way to have an efficient build process and software releases with high quality and in an agile way.
How About The Continuous Delivery?
So far, we only talked about agile processes, builds, releases and tests. But how about the continuous delivery? Well, I can say that the continuous delivery will be a consequence of a high quality development process:
- Have an efficient way to plan the development iterations;
- Construct software with the best development and architecture practices;
- Follow the agile methodology rules during the development iteration;
- Plan the tests and write good test cases. Yes, test cases is very important independently of what development methodology you are using (Agile or Traditional);
- Execute unit tests and functional tests;
- Test, test and test;
- Create integrated builds (preferably daily builds);
- Create the software release after validating the build;
- Yes, after that you can plan your continuous delivery!
My intention was not to show a direct way of making continuous deliveries (remember that there is no silver bullet in software development!). But I've tried to show all the complexity behind the entire development process until we achieve efficiency and quality in the software process to deliver high-quality, agile and business-to-business deliverables.