Leading a team of developers in the effort of building a robust, quality software product should involve the establishment of some process and tools to assist the team effort and serve as a safety net for the errors of getting people to work together. Continuous integration is, I believe, a crucial element of that process. Introduced by Martin Fowler and Matt Foemmel (see article Continuous Integration), continuous integration establishes the practice of frequent integration of work developed by the several team members verified by automated build and testing of integrated code within a clean sandbox. This practice is valuable for several reasons:
- It promotes the development of a clear process of building/deployment independent of any specificity of developer's platforms. Code that exists on a single platform only is bound to become dependent on specific aspects of that platform without anyone really noticing the dependencies until trying to port to other platforms. The existence of the integration clean sandbox allows these specific dependencies issues to not go unnoticed.
- It promotes the development of testing. Being based on the premise of "test often" it makes the testing development part of the team's process. The fact that there is a platform built specifically for build and testing verification transforms, from the developer's perspective, testing efforts into an even more useful and justifiable effort.
- It allows for quick detection of code integration issues by providing the clean slate for bringing all the code together. The little quirks of code combining can be detected by effective smoke/regression testing.