Three CI Configurations for Optimized Test Suite Execution

Continuous Integration (CI) is a software development practice that involves frequently integrating code changes from individual developers into a shared repository.

Lior Neumann
February 28, 2024
Introduction

Continuous Integration (CI) is a software development practice that involves frequently integrating code changes from individual developers into a shared repository. This blog provides an overview of three CI configurations, focusing on running an optimized test suite during the push to an open Pull Request (PR) and executing the full test suite at different stages in the development process. Although running all tests on every code change would provide the quickest feedback, limited resources make it challenging to achieve. Nonetheless, striking a balance between thorough testing and available resources is crucial to minimize the risk of releasing bad code. Let's explore these configurations further through several case studies:

1. Running optimized test suite in the push to an open PR, with full test suite after merging the feature branch into the main branch.

2. Running optimized test suite in the push to an open PR, with full test suite running periodically on the main branch every 1-3 hours.

3. Running optimized test suite in the push to an open PR, with full test suite after running on the main branch in a nightly build once a day.

Configuration 1: Full Test Suite after Merging Feature Branch

Case Study: Fast-Paced Web Development Company

Fast-Paced Web Development Company specializes in creating web applications with frequent updates and new feature releases. The goal: ensuring high-quality code and faster feedback.

Workflow Implemented:

1. Developer pushes code changes to an open PR in a feature branch.

2. CI triggers the optimized test suite on the feature branch.

3. If the optimized test suite passes, the PR is reviewed and approved.

4. Once approved, the feature branch is merged into the main branch.

5. CI triggers the full test suite on the main branch.

Advantages

- Faster feedback loop: The company benefits from quicker feedback during development, as integration issues are detected immediately after merging the feature branch.

- Selective resource usage: Resources are utilized only when necessary, as the full test suite is executed only when the optimized test suite passes and the feature branch is merged.

Disadvantages

- Higher cost: Running the full test suite after every merge might lead to higher resource consumption and costs compared to periodic or nightly builds.

Configuration 2: Periodic Full Test Suite on Main Branch

Case Study: Innovative Healthcare Solutions

Innovative Healthcare Solutions is a technology company that builds software solutions for the healthcare industry. The goal: balancing between resource usage and feedback loop.

Workflow Implemented:

1. Developer pushes code changes to an open PR in a feature branch.

2. CI triggers the optimized test suite on the feature branch.

3. If the optimized test suite passes, the PR is reviewed and approved.

4. Once approved, the feature branch is merged into the main branch.

5. CI runs the full test suite on the main branch periodically every 1-3 hours.

Advantages

- Balanced feedback loop: This configuration offers a balance between timely feedback and resource usage, as the full test suite is executed periodically on the main branch.

- Reduced resource consumption: By running the full test suite periodically, resources are conserved compared to running it after each merge.

Disadvantages

- Potential delay in issue detection: As the full test suite runs periodically, there might be a delay in detecting integration issues compared to running it after each merge.

- Less immediate feedback: The feedback loop is not as fast as Configuration 1 since the full test suite runs every 1-3 hours, as opposed to after each merge.

Configuration 3: Nightly Full Test Suite on Main Branch

Case Study: Cost-Conscious Analytics Startup

Cost-Conscious Analytics Startup is a small company offering financial analytics solutions. The goal: obtaining daily feedback on their software development with limited resources.

Workflow Implemented:

1. Developer pushes code changes to an open PR in a feature branch.

2. CI triggers the optimized test suite on the feature branch.

3. If the optimized test suite passes, the PR is reviewed and approved.

4. Once approved, the feature branch is merged into the main branch.

5. CI runs the full test suite on the main branch as part of a nightly build, once a day.

Advantages

- Resource conservation: By running the full test suite only once a day, this configuration conserves resources compared to more frequent test suite executions.

- Simplified test scheduling: With the full test suite running as part of a nightly build, there is a fixed time for test execution, allowing for better resource allocation and planning.

Disadvantages

- Delayed issue detection: As the full test suite runs only once a day, there might be a delay in detecting integration issues compared to running it after each merge or periodically.

- Slower feedback loop: The feedback loop is slower than in Configurations 1 and 2, as the full test suite runs on a daily basis rather than after each merge or periodically.

Cost Comparison

The table below provides a synthetic cost comparison for the three CI configurations, assuming the cost of running the full test suite is $10 per execution and the cost of running the optimized test suite is $1 per execution.

Note: These numbers are for illustrative purposes only and may not represent actual costs

Feedback Time Comparison

The table below provides a synthetic feedback time comparison for the three CI configurations. The values are based on the time taken to detect integration issues after merging a feature branch.

Note: These numbers are for illustrative purposes only and may not represent actual feedback times.

Conclusion

Selecting the appropriate CI configuration depends on the project's specific requirements and resource availability. Configuration 1 is suitable for projects with frequent code changes and a need for faster feedback, like Fast-Paced Web Development Company. Configuration 2 provides a balance between resource usage and feedback loop, which works well for companies like Innovative Healthcare Solutions. Configuration 3 is best suited for projects with limited resources and where daily feedback is sufficient, such as Cost-Conscious Analytics Startup.

The cost and feedback time comparisons provided here offer further insights to help you choose the CI configuration that best aligns with your project's goals and constraints. As you can see, Configuration 1 provides the fastest feedback but comes with higher costs, whereas Configuration 3 is the most cost-effective but has the slowest feedback loop. Configuration 2 strikes a balance between cost and feedback time. By evaluating the needs of your project, you can make an informed decision about which CI configuration to adopt.