Traditional vs. Non-blocking Continuous Integration Systems

Unlike traditional CI Systems which only perform a passive monitoring of the quality level of software project branches, non-blocking CI systems are actively involved in the pre-commit qualification process in such manner as to ensure that no regressions occurs in a pre-defined set of QA verification criteria.

The end goal of every software project is to reach a certain quality level by its release date, meaning it should be free of any software defects causing failures in the respective QA verifications. While some of the defects may be day one defects (like missing or incomplete features, for example), others may be regressions caused by the software changes being integrated during the project's lifetime. Some of these regressions can be extremely damaging, blocking the project's development activities. The method by which these regressions are addressed is what distinguishes projects using the non-blocking CI systems from those using traditional CI systems.

Traditional CI systems periodically perform QA verifications in order to detect regressions in the integration branch. Unfortunately this means these regressions are already impacting the project by the time they are detected, they need to be repaired for the project to make progress.
But repairing regressions often require human intervention, most traditional CI system have little or no automated support whatsoever for such activities. The primary reason for that is the lack of a complete, deterministic algorithm that would always be capable of producing a repair solution (other than the project moving backwards to the last stable label, of course).

Typically repairing a regression consists of identifying the committed software change which caused it and backing it out. But neither identifying the culprit nor backing it out are always simple, fast enough and/or even possible, which makes projects based on traditional CI systems susceptible to congestion, a significant limiting factor when it comes to the project's speed and scalability.

In an attempt to prevent regressions many projects make mandatory pre-commit QA verifications of the software changes. But, especially for large scale projects, the coverage of these pre-commit verifications is often just too small compared to the desired project quality level due to the limited verification costs. Checking that the changes don't break the build offer no protection whatsoever against the built image(s) being DOA and failing all feature testing, for example. Also, even for the covered functionality, individual, uncoordinated pre-commit verifications can be ineffective in preventing regressions. But they are effective in reducing the regression occurring rates.

Non-blocking CI systems rely on coordinated pre-commit QA verifications to identify and prevent faulty software changes from being committed into the integration branch and thus from causing regressions. No repairs needed. And, more importantly, it is a process which can be entirely automated. The coordination ensures that no pre-commit QA verifications is started until the previous such verification is completed and, if successful, the verified changes are committed to the integration branch.
In other words the pre-commit verifications of the changesets being committed are completely serialized - the only way of actually preventing regressions. Yes, serialized. And no, that doesn't necessarily mean they compromise on scalability. In fact our patent-pending ApartCI product was specifically designed to outperform traditional CI systems, especially on very large scale projects.

The following table summarizes the significant differences between software development projects using traditional CI systems and those using non-blocking CI systems.

Traditional CI SystemsNon-blocking CI Systems
breakages/regressions possible 100% prevented
branch quality level can drop at any time never decreases, it gradually raises towards the release level
repairs
  • required for the project to make progress
  • not part of the CI system itself
  • often require human intervention
not applicable - no regressions
faulty/conflicting changeset identification
  • performed post-committal, while the project is blocked by the damage they created
  • must be completed for changes to be backed out
  • difficult if not impossible to chase multiple culprits simultaneously
  • very difficult to be automated
  • based on pre-commit verifications on candidate changesets, the project remains healthy
  • completion status is irrelevant, other commits remain possible while search in progress
  • any number of culprits can be chased in parallel
  • can easily be automated