Continuous Delivery and the Iron Triangle of Software Delivery

The lords of software delivery have always told us that we can pick two out of the three sides of the iron triangle: good, fast, or cheap while building and deploying software. Continuous Delivery helps us by never having to make that choice again, deliver on all three and in fact continuously improve on each of them.

Continuous Delivery is the key philosophy, but its foundation is the better-known Continuous Integration (CI). Continuous Integration is the first step of the Continuous Delivery pipeline, it means that every developer keeps their work-in-progress continually integrated with every other developer. Typically this means every developer checks into the mainline at least once a day.

Continuous Integration

Continuous Integration (CI) is a development practice that requires developers to integrate code into a shared repository several times a day. Each check-in is then verified by an automated build, allowing teams to detect problems early. The main goal of CI is to prevent integration problems by merging code into the main branch more frequently. It is best used in combination with automated unit tests written through the practices of TDD: Test Driven Development. At Achievers, CI has been implemented using the concept of a Pipeline. A pipeline consists of a chain of processing elements (processes, threads, co-routines, functions, etc.), arranged so that the output of each element is the input of the next. We use Jenkins, a cross-platform, continuous integration, and continuous delivery application to build jobs to run on a schedule or trigger, as well as thread a number of these jobs together to form a pipeline.

Continuous Delivery

Continuous delivery (CD) is a logical evolution or outcome of Continuous Integration and is a software engineering approach in which teams produce software in short cycles, ensuring that the software can be reliably released at any time.[1] It aims at building, testing, and releasing software faster and more frequently. The approach helps reduce the cost, time, and risk of delivering changes by allowing for more incremental updates to applications in production. A straightforward and repeatable deployment process is important for continuous delivery. Developers used to a long cycle time may need to change their mindset when working in a CD environment. It is important to understand that any code commit may be released to customers at any point. Patterns such as feature toggles can be very useful for committing code early which is not yet ready for use by end users.

Over the years, Jenkins has become the undisputed ruler among continuous integration (CI), delivery and deployment (CD) tools. It, in a way, defined the CI/CD processes we use today. Software goes through various phases (build, test, deploy) and interacts with a multitude of tools (junit, sonar, nexus etc) on its way to production. Jenkins is the orchestrator that drives the entire pipeline and interacts with each of these tools. Jenkins’ strength is that it has 1200 plugins that let you interact with any of the tools that are in your organization.

 

Software Life Cycle

At Achievers we have implemented the Jenkins 2.0 pipeline to help us build, integrate, test and deploy to production every day.

 
Achievers Jenkins 2.0 pipeline process

This blog post here describes in detail the need for a Jenkins pipeline and why it is the best at what it does.

If you are looking to ship code every day and automate the whole thing, look into Jenkins and what it can do for you.

Amit is a technology leader at Achievers and is helping build the next generation Employee Success Platform. We are aggressively changing the way the world works and are always looking for great technical talent to help us build our service while being part of an awesome team.

Click here for career opportunities.

Profile image of author: Amit Kaura
As the Head of Product Partnerships and Innovation at Achievers, Amit is committed to building an industry-leading employee engagement platform that connects employees with their organization’s values and mission. He is an accomplished technology leader with 15 years of experience building software solutions for enterprise companies. Amit started his career in 2004 at Tata Consultancy Services (TCS), a 100-billion-dollar global leader in IT services and digital and business solutions. At TCS, he consulted with many customers across North America to deliver custom software solutions enabling profound business transformation. Before this as the Head of Engineering at Achievers, Amit was focused on scaling Achievers’ engineering operations and delivering consistent value to customers. He led a shift toward modern agile principles and practices, which include merging design and architecture and supporting continuous delivery and self-organizing teams. Amit currently lives with his wife and two young daughters in Toronto, where they can be found biking around the city during the nicer months. Amit holds an engineering degree from Punjab University in India.

STAY ENGAGED

Join our email alert list so you never miss a post.

FOLLOW US