How we work: Continuous Integration
Using an integrated approach which focuses upon the full life-cycle of web applications, Canoo's project success rate stands at a remarkable 100%.
What is Continuous Integration?
Continuous integration describes a set of software engineering practices that accelerate the delivery of software by decreasing integration times. When performing a change, a developer takes a copy of the current state of the repository code. As changed code is submitted to the repository by other developers, this copy gradually ceases to reflect the repository code.
Thus when developers submit code to the repository they must first update their code to reflect any resulting changes in the repository since they took their copy. The more changes made to the repository, the more work developers must carry out before submitting their own changes.
Eventually, the discrepancy between repository and the developer's baseline is so great that they encounter the so-called "integration hell" scenario, where the integration time is greater than the time taken to make the original changes. In the worst case, the changes the developer is making may have to be discarded and the work redone. Continuous integration, on the other hand, is the practice of integrating early and often, so as to avoid the pitfalls of "integration hell". The ultimate goal is to reduce cost and time.
- When unit tests fail, or a bug is discovered, developers might revert the code base back to a bug-free state without wasting time debugging
- Integration problems are detected and fixed continuously - no last minute hiatus before release dates
- Early warning of broken / incompatible code
- Early warning of conflicting changes
- Immediate unit testing of all changes
- Constant availability of a "current" build for testing, demo, or release purposes
- Developer discipline - the impact of checking in incomplete or broken code acts as an incentive towards shorter feedback cycles