Continuous integration in agile software development
Nowadays there are a lot of complications and obstacles on the way to the production. Now if you are not agile, it becomes literally a hell adding new functionalities. Therefore a lot of corporations and startups switch to agile methodologies and start using CI to achieve agility in software development.
There is a big buzz about agile transformation in the companies, for example Mango, HSBC, Edreams and many others are going through agile transformation. It seems that it is easy, but in reality for big companies it is a challenge to change all the processes they have established and change the mindset. But in this fast moving world, nowadays it is a must.
To be honest, you will find a lot of companies, which claim that they are Agile. Here is the problem, unfortunately each company understands Agile differently. In Apiumhub we have worked for different international companies and small startups in many industries and came to the conclusion that to be truly Agile you must do TDD and CI. And in this article I want to discuss the importance of continuous integration in Agile software development.
First of all, to stay on the same page, let’s look at the core of Agile methodology in software development. Agile means a constant, iterative and incremental evolution. It helps software development teams to stay focused regardless of the changing circumstances, it allows teams to adapt to them and at the same time assure rapid delivery of value. Why ? Because it is based on rapid feedback, flexibility, input of the team, continuous improvement and the delivery of high quality results.
Many years software development teams have been using agile development methods to improve the quality of software and quality of the process. This iterative and incremental development practices help them find solutions, which evolve through collaborative development. And most of them will tell you that nothing builds or destroys agility like a team’s commitment to continuous integration. Investing in CI results in fast feedback on code changes and it saves a lot of money and time. In a traditional way, a team that relies primarily on manual testing may get feedback in a couple hours or even several days after the code gets changed. During this period of time other changes are made and it gets extremely difficult to identify the problem.
WHAT IS CI
We are big fans of Martin Fowler, we always read his blog and strongly support his point of view. He says that continuous integration is a software development practice that requires team members to integrate code into a shared repository frequently. Basically every person integrates at least daily, which leads to multiple integrations each day. Integrations are verified by an automated build that runs regression tests to detect integration errors as quickly as possible. Usually once team members have implemented CI, they never switch back, they stick to continuous integration, because they find that CI leads to fewer integration issues and enables development of quality software more rapidly.
Many people say that it was first adopted as a part of Extreme Programming (XP). As normally several people work on the same project, CI helps developers stepping over each other code and prevent integration problems. CI works with other best practices like configuration management, compilation, software build, deployment, and testing which create single automated and repeatable process.
Continuous Integration helps software development teams be truly agile and adapt to rapid business changes, ensuring that software under development is in constant sync. At the end of each day, they know that their code works and is integrated correctly; component parts work together. And even if something doesn’t integrate or something doesn’t work, it’s quickly discovered.
The CI rule states that programmers never leave anything unintegrated at the end of the day. It is very important! The build should never spend the night in a broken state. Moreover, whoever breaks the build at check-in has to fix it again.
CI & TDD
If the idea of continuously integrating is to find problems quickly, giving each developer feedback on their work, then there must be a way to evaluate that work quickly. Test-driven development – another agile method fills that gap. Basically with TDD, you build the test, unit test and then develop functionality until the code passes the test. As each new addition to the code is made, its test can be added to the suite of tests that are run when you build the integrated work. This ensures that new additions don’t break the the existing code. And developers who “break the build” can be notified quickly to fix the problem in the early stage.
Combining Continuous integration with test-driven development puts more people under the agile umbrella, because it allows agile methods to work more efficiently, completing each other.
As TDD as CI give you a rapid feedback – crucial element in agile methodology. TDD and CI really simplify and speed up the process of developing new software, making it possible to launch a new scalable product as fast as possible with a solid MVP.
BENEFITS OF CI
Now, let’s look at CI more deeply to see key advantages it gives to the agile software development teams.
Integrating code more frequently leads to reduced risk of failure, reduced risk of overspending money on redoing work. Integrating work frequently means there is less of a gap between the current state of the application and the state of the application as the developer has it, that means that the scope for assumptions is reduced and everyone stays on the same page.
Find issues quickly
With the help of Continuous Integration tests and inspections are done regularly and problems are discovered immediately. It is like having a fire alarm in a house. It warns the software development team when it does mistakes to prevent having a big problem.
Agile is all about efficiency. With CI a lot of time can be saved automating repetitive manual processes, which are slow.
Continuous Integration helps release deployable software at any time. From a client perspective, this is the a crucial benefit, because projects that do not follow this method normally experience delayed releases. Moreover, CI helps software team to forget about the problem of having a release cycle with unforeseen issues which arise from deployment.
Confidence in quality software
Application of Continuous Integration provides greater confidence in producing quality software. With every build, software team knows that tests are run against the software to verify behaviour, that project coding standards are being adhered to, and that the result is a functionally testable product.
Transparency across your team
The results of tests should be displayed on the build pipeline. If a build passes, that increases the confidence of the team. If it fails, the developer can easily ask his team members to help him determine what may have gone wrong. Testing should be a transparent process amongst team members.
Agile transforms software development, makes it easier, scalable, flexible and faster. I really hope that after reading my articles you are convinced that being Agile is doing TDD & CI. It is your safety net, to find your errors quickly, fix them and build working software. When software teams apply CI, they are not afraid to add new functionalities and break existing code. They know that by doing that, they are much more efficient than other teams, agile team is the one that can get feedback fast and react to changing circumstances quickly. CI makes adaptability, flexibility, scalability, maintainability and quality possible.
As for the business, there are many benefits of continuous integration; bring products to market faster, respond better to changing requirements, small frequent iterations, constant evolution, etc. This creates a scalable and quality product for the customer, which is the premise of agility.