Why we should release early and release often
In the World War II, the Soviet Army had this idea to help stop the German invasion during 1941–1942. They would release the safety pin of a bomb strapped to the body of dogs trained to go under German tanks. Once they did that, the bomb would trigger and explode, destroying the tank.
The problem is that the dogs were trained by the Soviets using tanks that were standing still. In combat, with the German tanks moving and shooting, the dogs were scared to go under. Some of them were shot and some of them went back to the trenches and killed Soviet soldiers instead.
And there's more.
Dogs have a great sense of smell. They were trained using Soviet tanks which used diesel and the German used gasoline. Some of the dogs, instead of running under German tanks, ran under Soviet ones, destroying them instead.
The original idea was to train the dogs to go in a fixed target, release the bomb pin with the teeth and go back to the trenches safely. However, that didn’t work. Nobody was able to train the dogs efficiently to do that, so they failed early before deploying them to the battlefield.
Except for the Anti-Tank Dog.
They failed in the battle, under circumstances that could not have been reproduced in testing. And with it, they killed the same soldiers who trained them.
The Anti-Tank Dog was a project from the Soviet Army in WWII which failed miserably because they didn't test the dogs in the context of a real battlefield
Continuous Integration is the practice of integrating a piece of work several times, receiving feedback early instead of waiting a long time when that piece of work is thought to be "done". It can be integrating the codebase from a branch into the main trunk or integrating changes from development to production environment.
Even developing small features and iterating over customer feedback leverages the fundamentals of Continuous Integration.
Continuous Integration represents the practice of integrating a piece of work as early as possible instead of later so that one can receive immediate and frequent feedback on things that are wrong
Does it sound familiar?
If the Anti-Tank Dog creators had used one dog in the battle instead of dozens, they would have found the problems early and limit casualties. They would have received early feedback that it doesn't work and act accordingly. After all, it’s easier to control a single dog than 30 of them.
This is the fundamental benefit of Continuous Integration.
In their case, though, by deploying early they would also have revealed the tactic to the enemies. Software development practices are very similar to warfare but they are not the same. We're not fighting another civilization.
In most of the cases, when developing software it's ok to integrate things early and often because the benefits outweigh the potential costs.
If the Anti-Tank Dog project had used the principles of Continuous Integration the result could have been different
Isaac Newton once said in a letter to Robert Hooke:
If I have seen further, it is by standing on the shoulders of giants
There's no giant better than the warfare leaders of erstwhile.
We should always continuously learn with the things we do wrong. However, sometimes it’s easier and more convenient to learn with somebody else’s mistakes first.
Don't be the next one to build a batch of Soviet Anti-Tank Dogs.
Use Continuous Integration.