The Untameable Mindset
5. Continuous Integration and Continuous Delivery (CI/CD)

Avatar Edgar Ravenhorst

Written by: Edgar Ravenhorst, 24 mei 2024

Integrate and deliver code changes frequently with automated testing and deployment to ensure code quality and functionality. This approach promotes collaboration, reduces integration issues, and maintains a stable, deployable codebase.

Continuous Integration (CI) and Continuous Delivery (CD) are development practices where team members integrate their code changes into a shared repository frequently, and those changes are automatically tested and deployed. CI focuses on integrating and testing code regularly, while CD ensures that code changes are automatically prepared for release to production. Together, CI/CD aims to improve software quality and speed up the delivery process.

Key Principles

Commit code changes frequently to a shared repository. Use automated tests to verify each integration, ensuring that new changes do not break existing functionality. Maintain a comprehensive suite of tests that run automatically with each integration. Implement automated deployment pipelines to deliver changes to production quickly and reliably.

Benefits

CI/CD helps catch bugs and issues early, reducing the cost and effort required to fix them. It ensures that the codebase is always in a deployable state, allowing for more frequent releases and updates. CI/CD promotes better collaboration among team members, as it encourages regular code integration and testing. It also improves overall software quality by ensuring that code changes are continuously validated and deployed through automated processes.

Implementation Strategies

Set up a CI/CD server, such as Jenkins, GitLab CI, or CircleCI, to automate the integration, testing, and deployment processes. Ensure that all code changes are committed to a shared repository frequently. Develop and maintain a comprehensive suite of automated tests that cover various aspects of the application, including unit tests, integration tests, and end-to-end tests. Implement automated deployment pipelines to deliver changes to production quickly and reliably. Monitor the CI/CD process to ensure it remains fast and reliable, providing quick feedback to developers. Encourage a culture of regular and frequent code commits among team members.

Examples

A development team uses Jenkins to automate their CI/CD process, running tests and deploying code on every commit. This ensures that any issues are caught and addressed early, and changes are quickly delivered to production. Another example is a company using GitLab CI to manage their CI/CD pipeline, integrating and deploying code changes multiple times a day. This practice helps them maintain a stable and reliable codebase, allowing for frequent releases and updates.

--

Read about other Aspects of the Untameable Mindset:

This page is part of a series on The Untameable Mindset. Explore the other aspects to learn more about the principles that guide our development practices and behaviors.

1: Unified Vision and Goals

Ensure everyone understands the project's vision and goals. This shared understanding guides decisions and actions across the team.

Learn more

2: Cross-Functional Collaboration

Foster collaboration among all roles by encouraging open communication and teamwork. This approach leverages diverse expertise and perspectives to solve problems and innovate effectively.

Learn more

3: MVP Driven: Start Small, Grow Big

Begin with a Minimum Viable Product (MVP) and scale up through iterative development. This approach allows for rapid deployment and user feedback while ensuring the product evolves robustly and sustainably.

Learn more

4: Release or Disable Features Through Configuration

Use feature toggles and configurations to release or disable features quickly. This approach allows for flexible adjustments without extensive code changes, enabling controlled rollouts and quick responses to feedback.

Learn more

5: Continuous Integration and Continuous Delivery (CI/CD)

Integrate and deliver code changes frequently with automated testing and deployment to ensure code quality and functionality. This approach promotes collaboration, reduces integration issues, and maintains a stable, deployable codebase.

Learn more

6: Pragmatic Testing of Code

Focus on tests that provide real value and insight. Identify critical paths and concentrate testing efforts on the most important areas to ensure high code quality and performance, avoiding over-testing.

Learn more

7: Automate Repetitive and Complex Tasks

Automate complex or repetitive tasks across the organization and for end-users to improve efficiency and free up time for more valuable work. This enhances productivity and ensures consistent execution.

Learn more

8: Prioritize Needs of the End-User and (Future) Developer

Prioritize both the end-user experience and future developer needs to ensure the product is user-friendly and maintainable. Involve users in design, maintain clear documentation, and follow best practices for code maintainability.

Learn more

9: Concise and Accessible Documentation

Maintain concise and accessible documentation to provide an overview of the software, its components, and critical business logic. This supports effective use and development without consuming excessive time.

Learn more

10: Continuous Feedback and Improvement

Foster a culture of continuous feedback and improvement. Regularly collect feedback from all stakeholders to refine processes and products, ensuring the development process is always evolving and adapting.

Learn more


Coffee time!

Interested in learning more about Untameable and how we work?Reach out and let's discover how to become Untameable together

Call us: +31 627 311 410

Email us: info@untameable.io

Follow us: LinkedIn