API Development

CI/CD or to the Moon and Back

If you’ve ever visited the Kennedy Space Center in Florida, then you’ve undoubtedly been totally awestruck at the size and magnitude of the engineering effort that it took to land man on the moon. (Okay, let’s politely ignore the conspiracy theories.) The iconic image of Neil Armstrong taking his “one small step” from the “Eagle” lunar module will forever be etched in the minds of mankind. The goal of the mission was to land a man on the moon and return – the application that was built to achieve this incredible feat was Apollo 11.

Apollo 11 on the moon. (Source: spaceflightinsider.com)

Apollo 11 transported the astronauts from Earth to Moon and back to Earth, but it was the processes, engineering and infrastructure that were the true catalysts that allowed the journey to be successful. The number 11 is a good indicator that this was not the first Apollo mission.  Also remember that Gemini and Mercury came before Apollo, as did many different rockets, before the Saturn V was ready. What the space program was demonstrating for us was the process, engineering and infrastructure required to integrate/improve continuously (CI). Each launch or mission, demonstrated the capability to continuously deliver (CD); as long as the integration was successful, it was “GO for launch”. This was an incredible feat, the height of mankind’s capability at the time, but this was, pardon the pun, astronomically expensive!

In order to build and get the lunar module to the moon, NASA built the Saturn V rocket. The infrastructure that was needed to support and assemble the Saturn V rocket was incredible:

  • The Vehicle Assembly building, which at the time of construction was one of the largest buildings in the world
  • The crawler to carry the rocket to the launch pad is one of the biggest vehicles ever built in the world
  • The Mobile Launch Platform took five years to complete from inception to first launch, but would be used over fifty times in its lifetime, supporting the first five Saturn V flights and over fifty more shuttle missions

Saturn 5 rocket and launch tower on crawler outside the Vehicle Assembly building (Source: NASA)

Believe it or not, creating a cloud native application is similar to the Apollo mission. Of course, it is not life or death, but the tenants for success are similar. When deploying a software application, the success criteria is not as simple as just building, deploying and then running the application. Instead, for a cloud application to be successful, it requires a huge level of investment in resources and time. You will need to observe success, as part of an integration process, before moving forward to deliver the application. To achieve this goal, you must invest, because there is no customer lining up to pay for your infrastructure, but they will pay for a product that provides current/innovative business value, continuously. Also, this investment is not cheap, but neither is obsolescence. This investment is what is known today in the software world as CI/CD.

Continuous Integration (CI) & Continuous Delivery (CD)

A Continuous Integration (CI) process is one, whereby developers are required to integrate their code into a shared repository (git, SVN, etc) several times a day. Each check-in or commit, is then verified by an automated build that will exercise many tests against the code. This practice allows teams to detect problems early and fix them, pre-launch, quickly. While this is an integral piece and highly beneficial to code quality and speed, it’s only the first step of many to deliver value – much more automation is needed.

The next stage of the pipeline is Continuous Delivery (CD). CD is a software development discipline where you build software, in such a way, that software can be released to production, at any time, with low risk. How is this possible? A significant investment in the delivery infrastructure, just like the Apollo’s delivery infrastructure, is necessary to build the tooling, automation and reporting that can verify the readiness of the application, before it is delivered to the customer. Do not confuse Continuous Delivery with Continuous Deployment.

Continuous Integration (CI) & Continuous Delivery (CD) need continuous investment in maintaining unit tests, automated integration tests, automated end-to-end tests, and testing of non-functional aspects of the system. All this need to be automated and may either run on each merge to master or on less frequent intervals.

Test pyramid (Source: Coveros.com)

Continuous Deployment (CD)

The Apollo craft was launched into space by the Saturn V. The Saturn V was a three-stage liquid-fueled super heavy-lift launch vehicle that was developed to support the Apollo.

Saturn V rocket launching (Source: Smithsonian)

You launch your application / service with Continuous Deployment. With Continuous Deployment every change that goes through the pipeline will automatically get placed into production, resulting in many production deployments every day. Keep in mind, these deployments must have successfully passed through all the automated pipeline hurdles and upstream environments (QA, pre-production etc.), before they will be candidates for deployment to production. If, at any point, during the pipeline, a failure is detected – you must go back to the beginning (without collecting your $200/ NO SOUP FOR YOU!). Achieving Continuous Deployment is the holy grail. It is difficult to attain, but immeasurable in terms of its impact to speed, quality and opportunity. Remember, solutions generally don’t deliver business value until they are deployed to production; so, the faster that we deploy, the faster we get to business value. QED.

Remember, for any service, if you want it to be successful, it’s important to invest in the support infrastructure of CI-CD-CD around your service, just like NASA did for the Apollo missions. Itemized estimate of the run-out cost of the Apollo program (the total came to $23.9 billion):

Aircraft/OperationCost ($)
Apollo spacecraft7,945.0 million
Saturn I launch vehicles767.1 million
Saturn IB launch vehicles1,131.2 million
Saturn V launch vehicles6,871.1 million
Launch vehicle engine development854.2 million
Mission support1,432.3 million
Tracking and data acquisition664.1 million
Ground facilities1,830.3 million
Operation of installations2,420.6 million

In Kennedy’s speech on the USA’s space effort, he delivered the immortal words “We choose to go to the Moon!”. Do you think at the time he knew that to support the goal, he’d build the biggest earth vehicle ever or the most powerful rocket? So, remember when your boss tells you that “We choose to go to the Cloud” that you will need to make similar levels of investment in your infrastructure for CI/CD. One small step for man, one giant step for software development!